我有 3 个分区 sdb1、sdb2 和 sdb3。我想在 sdb3 中创建一个卷组和 lvm,sdb3 是安装的 Linux 分区,我的根文件夹就位于其中。
我正在输入:
pvcreate /dev/sdb3
但我得到:
Can't open /dev/sdb3 exclusively. Mounted filesystem.
好吧,我知道我的分区已安装,实际上我正在处理它。有没有办法创建卷组而不要求我的提供商重新格式化我的分区。我的意思是通过 SSH?
答案1
你可以做到这一点,但是很难。
这些步骤基本上如下:
- 克隆或者在 ramfs 上创建一个救援系统并启动它。它必须足够大,以便能够获取新软件包(如果您忘记了什么)。
- 开始它在 chrooted 环境中。
- 开始在其上安装他自己的 ssh 守护程序(当然,它将在 22 以外的端口上运行)。当然,您应该测试是否可以登录到此 ssh 守护程序。
- 这是关键。它只在 Linux 上有效,名为
pivot_root
。此系统调用/工具可以更改当前正在运行的系统的根分区。 pivot_root /mnt/rescuesys
,其中 chrooted ramfs 救援系统正在运行。如果成功,从此时起,您的原始系统将在 chroot 中运行,而您的救援系统将作为真正的 root 系统运行。- 使用
telinit q
命令重新启动 init(进程 1),使其也从您的真实(现在是 ramfs)系统而不是基于 sdb3 的系统运行。也许telinit Q
或telinit u
也telinit U
可能需要,这也取决于您的 init 系统。 - 使用
lsof -n|grep /mnt/<oldsysroot>
命令可以检查旧系统上是否存在任何现有的打开的文件描述符。如果有,则逐个终止并停止它们。 - 卸载、交换,直到旧系统没有任何残留。如果一切顺利,现在您可以卸载旧的 sdb3。如果不行,请转到 7(甚至 6)。
- 备份 sdb3 的内容。您可以根据需要,通过少量的文件系统调整大小、重新分区、复制来执行此操作。
- 使用您的等命令创建 lvm 卷
pvcreate
,创建 lvs,挂载它们,然后将您的根系统复制回来。 - 再次执行 1-9 点,包括
pivot_root
。从这一点开始,您的真实根系统很快就会成为您最初想要的逻辑卷。 - 销毁救援系统(如 6-8 点所做的那样)以释放内存。不要忘记启用交换。在理想的、安全优化的情况下,它也应该存在于加密的逻辑卷上,尽管这会严重降低速度。
- 修复
/etc/fstab
、重新配置/重新安装 grub 以及任何类似问题。 - 因为您无法确定您的系统是否真的可启动,直到您启动它为止,请尽您所能,但如果您物理上在服务器旁边(或者,至少具有足够的远程管理功能,可以是托管服务提供商的远程管理服务),请尝试进行下一次重新启动。
答案2
您建议的操作不应在线进行,因为这样做容易出错,而且可能很危险。您需要调整分区大小才能执行此操作,当您尝试弄乱系统根文件系统所在的分区时,您可能会丢失数据。这就是该检查的目的。
使用带有 gparted 的 livecd 来调整分区大小,然后在释放的空间中设置加密文件系统。