有一台机器:
[root@SERVER ~]# df -mP
Filesystem 1048576-blocks Used Available Capacity Mounted on
/dev/sda2 124685 7462 110897 7% /
tmpfs 12016 0 12016 0% /dev/shm
/dev/sda1 485 102 358 23% /boot
/dev/sdb1 32131 48 30444 1% /var/foobar1
/dev/sdb2 16009 420 14770 3% /var/foobar2
/dev/sdb3 988 6 930 1% /var/foobar3
/dev/sdb5 988 2 935 1% /var/foobar4
/dev/sdb6 988 17 919 2% /var/foobar5
/dev/mapper/datvg-FOO 125864 81801 37663 69% /var/FOOBAR6
1.2.3.4:/var/FOOBAR7 193524 128878 54816 71% /var/FOOBAR7
[root@SERVER ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datvg 1 1 0 wz--n- 204.94g 79.94g
[root@SERVER ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
FOO datvg -wi-ao---- 125.00g
[root@SERVER ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 123.7G 0 part /
└─sda3 8:3 0 3.8G 0 part [SWAP]
sdb 8:16 0 256G 0 disk
├─sdb1 8:17 0 32G 0 part /var/foobar1
├─sdb2 8:18 0 16G 0 part /var/foobar2
├─sdb3 8:19 0 1G 0 part /var/foobar3
├─sdb4 8:20 0 1K 0 part
├─sdb5 8:21 0 1G 0 part /var/foobar4
├─sdb6 8:22 0 1G 0 part /var/foobar5
└─sdb7 8:23 0 205G 0 part
└─datvg-FOO (dm-0) 253:0 0 125G 0 lvm /var/FOOBAR6
[root@SERVER ~]#
[root@SERVER ~]# grep ^Red /etc/issue
Red Hat Enterprise Linux Server release 6.8 (Santiago)
[root@SERVER ~]#
问题:我们如何将其迁移为对 / 和 /var 等 FS 使用 LVM?只是用LVM创建相同的“分区”,复制旧FS中的文件?机器将如何启动? /boot 可以保留在 /dev/sda1 中。
答案1
您只在 / 上使用了大约 7.4GB,而 LVM 中有 79GB 可用空间,所以,是的,您可以为/
(以及另一个/var
)创建一个新的 LV,并将文件从 / 和 /var 复制到它们。我建议用于rsync
副本。
例如,将新的 / 和 /var 安装为 /target 和 /target/var:
rsync --archive --sparse --one-file-system --delete-during --delete-excluded \
--force --numeric-ids --hard-links / /var /target/
也可以选择使用这些选项:
--human-readable --human-readable --verbose --stats --progress
您可以根据需要多次重复此操作,直到您有足够的空闲时间重新启动到单用户模式并完成该过程,即:
- 重新启动到单用户模式
- 挂载
/
并/boot
RW(如果尚未 RW) - 安装
/target
并/target/var
如上所述 - 如上所述,最后一个 rsync
for i in proc dev sys dev/pts run boot; do mount -o bind /$i /target/$i; done
chroot /target
- 编辑
/etc/fstab
并更改 / 和 /var 的 device/uuid/labels - 跑步
update-grub
- 出口
for i in proc sys dev/pts dev boot var /; do umount /target/$i ; done
- 重启
如果重启后一切正常,您可以将/dev/sda2
(旧根分区)添加到 LVM VG 中datvg
。
如果您愿意,您还可以为/boot
(安装为/target/boot
)创建一个 LV 并将其与 和 一起 rsync 等/
(除了从周围的循环/var
中删除 boot 之外,您不希望将原始绑定安装到)。for
mount -o bind
/boot
/target/boot
然后也创建一个用于交换的 LV,您可以将整个 LV 添加/dev/sda
到 LVM VG(删除 sda 上的所有分区,创建/dev/sda1
并添加该分区)。
另一种选择:Clonezilla 很棒!
顺便说一句,另一种方法是使用克隆属CD 或 USB 记忆棒,创建 LVM 分区,然后使用 cz 将 / 和 /boot 克隆到 LVM。自从我上次这样做以来已经有一段时间了,所以我记不清了,但您可能仍然需要挂载 /target (和 /target/var、/target/boot)、进行绑定挂载并编辑 fstab 和update-grub
。
事实上,上面的循环是从我的可启动映像for
的自定义脚本创建的别名中复制并稍微修改的......所以,这是一个非常好的赌注,它是需要的。tftp
clonezilla
它启动时会使用 root shell 可用的别名:
alias prepare-chroot-target='for i in proc dev sys dev/pts ; do mount -o bind /$i /target/$i ; done'
可选的额外阅读(BTRFS宣传)
如果您不使用 LVM,因为您需要为 VM 创建分区(分区和大多数其他块设备比 .qcow2 或 VM 的原始文件更快),我建议使用BTFS 而不是LVM。它比 LVM 更灵活(而且,在我看来,更易于使用) - 例如,增加(或缩小)子卷的分配是微不足道的。
btrfs
具有非常有用的功能,能够执行就地转换从 ext3 或 ext4 到 btrfs。
不幸的是,该维基页面现在有一个警告:
警告:从 4.0 内核开始,此功能不再经常使用或经过充分测试,并且有一些报告表明转换不能可靠地工作。请随意尝试,但请确保您有备份。
你可以进行就地转换/
,将/var/foobar*
目录迁移到 btrfs,然后将 sdb 的一半添加到 btrfs / (作为 RAID-1 镜像),并将另一半用于额外存储(也是 btrfs)或用于 LVM。遗憾的是您没有一对相同大小的磁盘。
如果您选择不进行就地转换(可能是明智的),则该过程将类似于上面的 rsync 等方法,只不过不是为/target/{,boot,var}
您创建 Btrfs 卷以及为和/target
的子卷创建 LVM 分区。您需要一个单独的交换分区(或者忘记磁盘交换并使用主线内核压缩 RAM 块设备。或者添加更多 RAM,这样就不需要交换。或者两者兼而有之。)/target/boot
/target/var
zram
但备份数据和配置文件、启动发行版的安装程序 CD 或 USB、从头开始重新安装(仔细规划分区布局后)然后恢复备份的选定部分(/home、/)会更容易。 usr/local,/etc 中的一些配置文件)。
更多可选额外阅读(ZFS宣传)
考虑到您的驱动器不匹配,btrfs 可能是您更好的选择,但我发现提到 btrfs 就不可能不提到 ZFS:
如果您需要为虚拟机提供块设备并且想要 btrfs 之类的灵活性并且不介意安装非主线内核模块,请使用ZFS而不是 btrfs。
它几乎可以完成 btrfs 所做的所有事情(不幸的是,除了重新平衡。并且您只能将磁盘添加到池中,而不能删除它们或更改布局)还有更多,您可以创建 ZVOL(使用池中的存储的块设备)以及子卷。
如今,在 Debian 或 Ubuntu 和其他几个发行版上安装 ZFS 很容易 - 发行版提供软件包(包括spl-dkms
并zfs-dkms
为您的内核自动构建模块)。构建 dkms 模块需要花费相当长的时间,但除此之外,它与安装任何其他软件包集一样简单直接。
不幸的是,转换为 ZFS 并不像上面的过程那么容易。将 rootfs 转换为 ZFS 本身是一个相当困难的过程。与 一样btrfs
,使用具有良好 ZFS 支持的发行版来备份数据和配置文件等并从头开始重建机器会更容易(Ubuntu 可能是最佳选择)Linux 上的 ZFS眼下)。
更糟糕的是,ZFS 要求 vdev 中的所有分区或磁盘大小相同(否则 vdev 只能与其中最小的设备一样大),因此您只能将 sda 和大约一半的 sdb 添加到 zpool 中。 sdb 的其余部分可以是 btrfs、ext4、xfs,甚至 LVM(这有点毫无意义,因为您可以使用 ZFS 制作 ZVOL)。
我在 Debian 上使用 ZFS(很高兴 ZFS 最终将其纳入发行版本身,这样我就可以使用本机 debian 软件包)。我已经使用它好几年了(至少从 2011 年开始)。强烈推荐。我只是希望它具有 btrfs 的重新平衡功能,这本身就非常有用,并且可以从池中删除 vdev(目前 ZFS 不可能),甚至可以从 RAID-1 转换为 RAIDZ-1。
btrfs 能够进行在线转换,例如从 RAID-1 到 RAID-5、RAID-6 或 RAID-10,这也很酷,但我可能不会使用。我几乎放弃了所有形式的 RAID-5/RAID-6,包括 ZFS 的 RAID-Z(在我看来,性能成本和清理或重新同步时间并不值得),而且我更喜欢RAID-1 或 RAID-10 - 当我愿意时,我可以向池中添加任意数量的 RAID-1 vdev(这可以有效地将 RAID-1 转换为 RAID-10,或者只是向现有 RAID 添加更多镜像对) 10)。
无论如何,我在虚拟机中广泛使用 ZVOL,因此 btrfs 不是我的选择。