我有一台安装了 Debian 的服务器,它有 3 个物理分区,覆盖了整个磁盘:启动、根和交换。现在我想用 LVM 分区替换这些分区。我知道如何一开始就使用 LVM 安装 Debian,但在这种情况下,我无法一开始就安装系统,因为提供商为我提供了一台具有远程访问权限的服务器,并且系统以这种方式安装。
我怎样才能仅使用 ssh 连接以及可能使用其他远程服务器来更改放置一些临时数据的分区?
答案1
您不可能在只有 /、/boot 和 <swap> 分区的运行服务器上替换它们。唯一的方法是卸载 / 分区,缩小它并在最后创建一个新的 LVM 分区,但由于您只有远程 ssh 访问权限,因此您不可能在不损坏数据的情况下缩小活动的已安装分区。
答案2
我这边的快速更新。背景:今天我在网上安装了一台使用物理分区方案而不是 LVM 的专用服务器。有 3 个分区:
/boot(ext4)-512M /(ext4)-730G 交换-8G
由于没有控制台访问权限,最终目标是将现有的根分区转换为 LVM。
考虑到 ext4 不可缩小,唯一的方法是重新使用交换分区作为临时根目录。我还决定使用 LVM 设置临时根目录,以确保该过程能够正确运行。
首先进行交换:
swapoff -a
然后通过 parted 调整分区大小(最初从 742 调整到 750):
parted
resize 3 742 744
并为 LVM 创建了一个分区:
mkpart primary ext2 744 750
set 4 lvm on
为临时根创建 PV/VG/LV/文件系统:
pvcreate /dev/sda4
vgcreate VolGroup00 /dev/sda4
lvcreate -L 5.73G -n tmproot VolGroup00
mkfs.ext4 /dev/VolGroup00/tmproot
下一步是将根复制到临时位置:
mount /dev/VolGroup00/tmproot /media
rsync -ravzxq / /media/
一旦一切都准备就绪,/media/etc/fstab 中的根文件系统的条目也必须更改:
/dev/VolGroup00/tmproot / ext4 defaults 1 1
差不多了,最后的也是最不想要的部分是,没有控制台访问,修改 /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
修改条目:
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
为了安全起见:添加了 insmod lvm 以及内核的 dolvm 参数,并将根路径也更改为 root=/dev/mapper/VolGroup00-tmproot。此时使用 /dev/mapper/ 路径很重要。为了安全起见,我还添加了 panic=10 参数,并且没有更改标头中的默认启动项。相反,我尝试告诉 grub 仅使用新设置启动一次,如果失败,原始条目可以工作:
grub
savedefault --default=1 --once
最后:
reboot
对我来说,第一次没问题,因此我重复了整个过程,在原始根分区之上创建一个新的卷组,最后使用 LVM 将根放在正确的位置。
希望这可以帮助。
答案3
在 Linux 中没有什么是不可能的,但你必须下定决心并且疯狂地尝试你所描述的事情。请记住,如果你只有 SSH 访问权限,那么如果你犯了一个错误,你很有可能会失去对服务器的访问权限。如果你有一个远程“串行”控制台和虚拟电源开关,这可能会有所帮助。话虽如此,如果你有一个全新的安装并且没有数据可丢失,为什么不尝试一下呢?我找到了一个教程远程将 Linux 系统转换为 RAID1;您尝试针对 LVM 执行的步骤是类似的。
首先,让我们考虑一下临时存储空间的必要性。假设服务器上没有第二个磁盘,你可以使用以下方法缩小现有分区parted
当然,这要求您的启动和根分区使用的磁盘空间不能超过一半,并且必须使用可缩减的文件系统。(例如,XFS 和 JFS 就不可缩减。)
缩小现有分区后,您可以在释放的空间中创建一个 LVM 物理卷,并在其中创建一个卷组和逻辑卷。复制文件系统。(复制根文件系统时,应删除除 之外的所有文件sshd
,最好处于单用户模式。由于复制的是已挂载的文件系统,因此可能必须使用rsync
而不是dd
。)
然后,您需要准备一个支持 LVM 的 initrd,并告诉 GRUB 启动新系统,如 Warren Togami 的教程中所述。完成此操作后,删除旧文件系统并使用parted
LVM 卷进行扩展就很简单了。
祝你好运!如果成功的话请告诉我们!
答案4
他可以在(之前已禁用的)交换分区中设置一个中间救援系统(如果机器中没有 RAC,则这项工作会非常费脑力),然后从那里开始工作。此外,某些文件系统有在线调整大小工具,然后缩小分区并重新启动是 KWYD 的情况,但也是可能的。