稍旧的系统,大约 2 年前。运行 CentOS
我注意到我已经/var
使用了很多空间,而且都是好东西……所以删除空间并不是解决办法。
有没有简单/安全的方法可以移动/var
到新安装的磁盘而不破坏操作系统?我知道如何添加磁盘并正确格式化它们,只是/var
以前从未真正尝试过移动到新目的地。
我读过 Server Fault 和其他网站上的文章,但它们对于具体如何解决这一问题没有给出明确的答案。它们通常建议停止进程等。但没有详细说明如何安全地执行此操作,也没有说明如何确保在移动数据和装载所有内容之前正确停止所有内容。
已经检查过这个:
不想做会严重破坏 MySQL 的事情。谢谢!
更新:
文件系统信息:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_centos6-centos6_root
47G 41G 4.0G 92% /
tmpfs 3.9G 500K 3.9G 1% /dev/shm
/dev/vda1 276M 199M 64M 76% /boot
/dev/vdb1 197G 119G 68G 64% /home
/dev/vdd1 197G 95G 93G 51% /home2
/dev/vde1 99G 8.1G 86G 9% /home3
/usr/tmpDSK 2.0G 40M 1.8G 3% /tmp
坐骑详细:
# cat /etc/fstab
/dev/vg_centos6/centos6_root / ext4 usrjquota=quota.user,jqfmt=vfsv0 1 1
/dev/vda1 /boot ext3 defaults 1 2
/dev/vdb1 /home ext4 usrjquota=quota.user,jqfmt=vfsv0 0 0
/dev/vdd1 /home2 ext4 usrjquota=quota.user,jqfmt=vfsv0 0 0
/dev/vde1 /home3 ext4 usrjquota=quota.user,jqfmt=vfsv0 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/mapper/vg_centos6-lv_swap swap swap defaults 0 0
/usr/tmpDSK /tmp ext3 defaults,noauto 0 0
据我所见,/var
它肯定位于根分区上。我希望改变这一点。
答案1
好消息是,您的系统可能是虚拟机,可以通过设备文件节点名(例如)得知,如果它来自 iSCSI 存储,/dev/vdb
它将简化我们的程序,无需使用任何专门的工具(例如)。iscsi-initiator-utils
CentOS 提供了最小安装包含对我们而言最重要的工具的媒体rsync
。如果您使用的是 CentOS 6 并使用 64 位系统,那么您可以通过选择镜子例如,这。然后,你可以从这里大小不超过 400 MB。有关其他步骤的指导原则如下:
准备备用磁盘。将新磁盘连接到虚拟机并照常格式化。您已经写道您知道如何执行此操作。
启动进入救援模式. 正常关闭虚拟机并启动最小 ISO。提供的安装选项之一是救援已安装的系统。选择它将允许我们从 CD 启动,而无需任何进程写入您的
/var
目录。这将为我们提供一个安全的环境,将数据从旧磁盘传输到新磁盘。在进入 shell 提示符之前,您必须浏览几个菜单。括号中的项目对我来说最有意义。请选择您认为合适的项目。- 选择语言。[英语]
- 键盘类型 [us]
- 您是否要启动此系统上的网络接口?[否]。我们可以这样做,因为您位于虚拟机上,并且新磁盘无需网络连接即可使用。
- 救援环境...[跳过]。这是一个较长的对话。只需选择跳过即可。
- 启动 shell
传输数据。假设新磁盘上存储新
/var
数据的设备节点是/dev/vdc1
,旧根分区中保存目录的节点/var
是/dev/vda2
。创建临时挂载点并复制数据:mkdir /mnt/var /mnt/var_old mount /dev/vda2 /mnt/var_old mount /dev/vdc1 /mnt/var rsync -a /mnt/var_old/ /mnt/var/
移动旧的 /var. 移走旧
/var
目录并创建一个新的空挂载点:mv /mnt/var_old/var /mnt/var_old/var.old mkdir /mnt/var_old/var
编辑 fstab. 设置
/etc/fstab
以便新磁盘上的文件系统挂载在 上/var
。给定上述设备节点,将如下条目添加到/mnt/var_old/etc/fstab
:/dev/vdc1 /var ext4 defaults 1 2
重启。
exit
在 shell 提示符下键入并选择重新启动 VM。然后启动常规操作系统安装,而不是最小 CD。
如果一切顺利,您的旧/var
数据将存在/var.old
并/var
包含所有数据,可供使用。如果您愿意,您可以/var.old
在正常运行几天后删除。
答案2
我很喜欢民主党的答案,但对于 Centos 7 上的 LVM,我想为那些不知道的人添加以下步骤:
启动救援媒体。退出到 shell。
扫描卷组:
lvm vgscan -v
激活所有卷组:
lvm vgchange -a y
列出逻辑卷:
lvm lvs –all
有了这些信息和激活的卷,您应该能够安装这些卷:
mount /dev/volumegroup/logicalvolume /mountpoint
这是以下说明的副本:http://jim-zimmerman.com/?p=587
并注意 rsync 如何创建其目标目录。将 /old/var 复制到 /new/var 会创建 /new/var/var,这让我很头疼,因为我必须重组我的新 var 以便 CentOS 满意 :)
答案3
挂载新的分区/mnt
,然后rsync --progress /var /mnt
,当这一切已经完成时,umount /mnt
编辑/etc/fstab
新的 var 分区和reboot
答案4
答案是肯定的!
我的动机与你的不同,很可能 - 我尽我所能将写入操作从系统磁盘中完全移除,以延长它们所依赖的 SSD 的使用寿命。
为此,我只需准备环境,在其他磁盘(无论是 HDD 还是其他 SSD)上创建磁盘结构,然后移动数据,然后启动到恢复模式/救援模式(无论您的版本要求什么),然后使用rsync
以使磁盘空间相等,执行mv /var /var.old
(只是为了确保),然后ln -s
对新位置执行操作,然后启动。您已完成!
如果出了什么问题,可以通过再试一次轻松解决...