如何将物理分区系统更改为LVM?


10

我有一台带有Debian的服务器,该服务器具有3个覆盖所有磁盘的物理分区:引导,根y交换。现在,我想用LVM分区替换该分区。我知道如何从一开始就用LVM安装Debian,但是在这种情况下,我不能一开始就安装系统,因为提供商会给我提供一台具有远程访问权限的服务器,并以这种方式安装系统。

如何仅使用ssh连接以及可能放置其他临时数据的其他远程服务器更改分区?


2
致封闭投票人的注意事项:这不是对所提及问题的重复,因为此处存在一个变体:完全远程。
sysadmin1138

Answers:


-1

您不能在仅具有/,/ boot和<swap>分区的运行服务器上替换它们。唯一的方法是卸载/分区,缩小它并在最后创建一个新的LVM分区,但是由于您只有远程ssh访问权限,因此您不可能在没有数据损坏的情况下缩小一个已安装的活动分区。


3
可以在安装ext3文件系统时调整其大小:linux.die.net/man/8/ext2online
200_success

6
永不言败...
比特兔

21

我这边的快速更新。上下文:今天,我上线了一个装有物理分区方案而不是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将根目录放在正确的位置。

希望这可以帮助。


1
这对我非常有效,将我的2磁盘RAID 1设置转换为RAID 1完全远程的LVM(已预安装了一些备用磁盘)。在grub2中,重新启动菜单项一次的新方法是首先编辑/ etc / default / grub文件,以确保GRUB_DEFAULT = saved。然后update-grub。然后,您运行grub-reboot #以设置菜单项以仅用于下一次重新引导。然后,您可以重新启动。
casey 2013年

Ubuntu(和debian)有自己的用于修改grub配置的系统。可以按以下指定的方式更干净地更新根分区:unix.stackexchange.com/a/5318/192211
EFraim

3

在Linux中,没有什么是不可能的,但是您必须坚定并疯狂地尝试您描述的内容。请记住,如果您仅具有SSH访问权限,则很可能会因错误而失去对服务器的访问权限。如果您有远程“串行”控制台和虚拟电源开关,那可能会有所帮助。就是说,如果您安装的是全新的安装而不会丢失任何数据,那么为什么不尝试呢?我找到了将Linux系统远程转换为RAID1的教程。您尝试使用LVM的步骤类似。

首先,让我们考虑临时存储空间的必要性。假设服务器上没有第二个磁盘,则可以使用parted缩小现有分区。当然,这需要引导分区和根分区使用少于一半的磁盘,并且它们必须使用可收缩的文件系统。(例如,XFS和JFS不可收缩。)

缩小现有分区后,可以在释放空间,其中的卷组和逻辑卷中创建LVM物理卷。复制您的文件系统。(复制根文件系统时,您应该杀死除以外的所有内容sshd,并且最好处于单用户模式。您可能必须使用rsync而不是dd因为要复制已挂载的文件系统。)

然后,按照Warren Togami的教程中所述,准备一个具有LVM支持的initrd并告诉GRUB引导到新系统中。完成此操作后,使用partedLVM卷并增加LVM卷即可删除旧文件系统,这很简单。

祝好运!让我们知道它是否有效!


3

之前,我已将我的根分区“ /”(其指向在centos 6上具有10G的磁盘分区“ / dev / sda2”)迁移到LV分区,执行的步骤如下:

  • 在10G的VMware上添加硬盘。
  • 无需重新启动系统即可识别磁盘。
ls / sys / class / scsi_host / | 同时读x; 做echo“---”> / sys / class / scsi_host / $ {x} / scan; 做完了
  • 在新磁盘上创建一个分区,假设我的新磁盘是/ dev / sdb
  • 使用:
fdisk / dev / sdb
  • 在“ fdisk”界面中,可以使用键“ n”分配+ 9G的容量来创建分区,然后使用键“ t”分配“ 8e”(lvm分区)更改类型分区,最后使用键“ w”来应用更改,如果您想查看分区表的外观,则可以按“ p”键。
  • 创建分区后,我们可以使用以下命令来验证是否已创建设备(该命令在不使用磁盘时有效):
零件探头/ dev / sdb
  • 设备实际退出后,让我们按以下顺序创建LVM对象:
pvcreate / dev / sdb1
vgcreate vg_root / dev / sdb1
lvcreate -v -n lv_root vg_root -L 9G
  • 创建低压单元后,让我们分配一个FS并将其安装到当前系统。
mkfs -t ext4 / dev / vg_root / lv_root
mkdir / mnt / new_root /
挂载-t ext4 / dev / vg_root / lv_root / mnt / new_root /
  • 如果您不知道当前分区的FS,可以使用以下命令找到它:
df -lhT
猫/ etc / fstab
笨蛋
  • 当安装新的LV时,我们可以继续复制系统的所有文件。
查找/ -xdev | cpio -pmvd / mnt / new_root /
  • 复制文件后,我们可以继续更改“ chroot”,但在挂载某些分区之前:
cd / mnt / new_root /
挂载-t proc / proc proc
挂载-t sysfs / sys sys /
挂载--rbind / dev dev /
  • 现在让我们更改chroot
chroot / mnt / new_root /
  • 在新的根目录中后,修改文件:
vi / etc / fstab
  • 留下的文件几乎类似于:
#UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa / ext4默认值1 1
/ dev / mapper / vg_root-lv_root / ext4默认值1 1
  • 正确修改文件后,让我们在根目录中创建一个名称为“ ./autorelabel”的文件,以防万一使用SELINUX“ enforcing”或“ permissive”。
触摸./autorelabel
  • 现在让我们离开/ mnt / new-root的chroot环境
出口
  • 如果更改是根据您的情况完成的,请执行最后一项更改,即修改grub文件“ /boot/grub/grub.conf”,添加一个新菜单(请勿修改您当前的启动选项,直到新一个添加正确工作)。
#之前
标题CentOS 6(2.6.32-573.el6.x86_64)
        根(hd0,0)
        内核/vmlinuz-2.6.32-573.el6.x86_64 ro root = UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa rd_NO_LUKS LANG = zh_CN.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 crashkernel = auto KEYBOARDTYPE = pc rd_NO_DM rhgb安静
        的initrd /initramfs-2.6.32-573.el6.x86_64.img

#现在
标题CentOS 6(2.6.32-573.el6.x86_64)
        根(hd0,0)
        内核/vmlinuz-2.6.32-573.el6.x86_64 ro root = UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa rd_NO_LUKS LANG = zh_CN.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 crashkernel = auto KEYBOARDTYPE = pc rd_NO_DM rhgb安静
        的initrd /initramfs-2.6.32-573.el6.x86_64.img

标题CentOS 6(2.6.32-573.el6.x86_64-lvroot)
        根(hd0,0)
        Insmod LVM
        内核/vmlinuz-2.6.32-573.el6.x86_64 ro dolvm root = / dev / mapper / vg_root-lv_root rd.lvm.lv = vg_root / lv_root LANG = zh_CN.UTF-8 SYSFONT = latarcyrheb-sun16 crashkernel = auto键盘类型= pc KEYTABLE =我们rhgb安静
        的initrd /initramfs-2.6.32-573.el6.x86_64.img

#添加的行是 
标题CentOS 6(2.6.32-573.el6.x86_64-lvroot)
        根(hd0,0)
        Insmod LVM
        内核/vmlinuz-2.6.32-573.el6.x86_64 ro dolvm root = / dev / mapper / vg_root-lv_root rd.lvm.lv = vg_root / lv_root LANG = zh_CN.UTF-8 SYSFONT = latarcyrheb-sun16 crashkernel = auto键盘类型= pc KEYTABLE =我们rhgb安静
        的initrd /initramfs-2.6.32-573.el6.x86_64.img
  • 完成grub文件的更改后,让我们重新生成一个新的initrd iso文件:
cd /启动
cp -av initramfs-$(uname -r).img initramfs-$(uname -r).img.old
dracut -f
  • 终于重启:
初始化6
# 要么
重启
  • grub菜单出现后,选择一个新的添加的“ CentOS 6(2.6.32-573.el6.x86_64-lvroot)”,并验证其是否正常运行。
  • 如果系统正常运行且未使用“ / dev / sda”,则可以将其删除并与您的VM或物理服务器分离。
dd if = / dev / zero of = / dev / sda bs = 1
  • 最后一个陡峭集作为默认条目,将新项添加到grub菜单“ /boot/grub/grub.conf”中:
#default = 0
默认值= 1

希望以前提供的信息对某人有所帮助。

提前致谢,

曼努埃尔·拉佐(Manuel Lazo)


1

他可以在(先前禁用的)交换分区中设置一个中间救援系统(如果您的计算机中没有RAC,则需要进行神经破坏工作),然后从那里进行工作。同样,对于某些文件系统,存在在线调整大小工具,然后缩小分区并重新启动是KWYD的一种情况,但可能。


为了描述甚至在磁盘上仅一个分区上也可以使用的两个甚至更疯狂的想法:a)在根分区上创建一个大的空文件,确保已连续分配,然后通过回送驱动程序对其进行处理...要使分区从该文件的物理第一个块开始的分区表。b)将自己的chroot(甚至可能的话,甚至可以使用ivot_root)放入一个ramdisk并设置一个基础并在那里备份...核对您之下的实际根文件系统。
rackandboneman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.