我有一台带有 Debian 的服务器,它有 3 个物理分区,覆盖了所有磁盘:boot、root y swap。现在我想用 LVM 分区替换该分区。我知道如何在开始时使用 LVM 安装 Debian,但在这种情况下,我无法一开始就安装系统,因为提供商为我提供了一台可以远程访问的服务器,并且系统以这种方式安装。
如何仅使用 ssh 连接和可能的其他远程服务器来更改该分区,以放置一些临时数据?
小智 22
我这边的快速更新。上下文:今天我上线了一个安装了物理分区方案而不是 LVM 的专用服务器。有3个分区:
/boot (ext4) - 512M / (ext4) - 730G 交换 - 8G
由于没有控制台访问的性质,最终目标是将现有的根分区转换为 LVM。
考虑到 ext4 不可收缩,唯一的方法是将交换分区重用为临时根。我还决定使用 LVM 设置临时根目录,以确保该过程能够以正确的方式工作。
首先是交换:
swapoff -a
Run Code Online (Sandbox Code Playgroud)
然后通过 parted 调整分区大小(最初是从 742 开始到 750):
parted
resize 3 742 744
Run Code Online (Sandbox Code Playgroud)
并为 LVM 创建了一个分区:
mkpart primary ext2 744 750
set 4 lvm on
Run Code Online (Sandbox Code Playgroud)
临时根目录的 PV/VG/LV/文件系统创建:
pvcreate /dev/sda4
vgcreate VolGroup00 /dev/sda4
lvcreate -L 5.73G -n tmproot VolGroup00
mkfs.ext4 /dev/VolGroup00/tmproot
Run Code Online (Sandbox Code Playgroud)
下一步是将根复制到临时位置:
mount /dev/VolGroup00/tmproot /media
rsync -ravzxq / /media/
Run Code Online (Sandbox Code Playgroud)
一切就绪后,还必须更改 /media/etc/fstab 中根文件系统的条目:
/dev/VolGroup00/tmproot / ext4 defaults 1 1
Run Code Online (Sandbox Code Playgroud)
差不多到了,最后一个可以说是没有控制台访问权限的最不需要的部分是修改 /boot/grub/grub.conf:
原始条目:
title CentOS (2.6.32-279.22.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro root=UUID=e769af21-d9e1-455f-a6a7-7a9c84d8cbea rd_NO_LUKS LANG=en_US.UTF-8 KEYBOARDTYPE=pc KEYTABLE=hu rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img
Run Code Online (Sandbox Code Playgroud)
修改条目:
title CentOS (2.6.32-279.22.1.el6.x86_64) LVM
insmod lvm
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro LANG=en_US.UTF-8 KEYBOARDTYPE=pc KEYTABLE=hu SYSFONT=latarcyrheb-sun16 crashkernel=auto dolvm root=/dev/mapper/VolGroup00-tmproot panic=10
#rd_NO_DM rd_NO_MD rd_NO_LUKS
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img
Run Code Online (Sandbox Code Playgroud)
为了安全起见:insmod lvm 与内核的 dolvm 参数一起添加,根路径也更改为 root=/dev/mapper/VolGroup00-tmproot。此时使用 /dev/mapper/ 路径很重要。作为安全存款,我还添加了 panic=10 参数并且没有更改标头中的默认引导条目。相反,我尝试告诉 grub 只使用新设置启动一次,如果失败,原始条目可以工作:
grub
savedefault --default=1 --once
Run Code Online (Sandbox Code Playgroud)
最后:
reboot
Run Code Online (Sandbox Code Playgroud)
第一次对我来说没问题,所以我重复了整个过程,在原始根分区的顶部创建了一个新的卷组,最后我使用 LVM 在正确的位置获得了根。
希望这可以帮助。
您不可能在仅具有 /、/boot 和 <swap> 分区的正在运行的服务器上替换它们。唯一的方法是卸载 / 分区,缩小它并在最后创建一个新的 LVM 分区,但由于您只有远程 ssh 访问权限,因此不可能在不损坏数据的情况下缩小活动的已安装分区。