合并分区并保留数据

合并分区并保留数据

我有一台旧服务器需要重新利用。这部分意味着重新排列分区。当前布局如下:

$ lsblk
名称 MAJ:MIN RM 大小 RO 类型 安装点
sda 8:0 0 558.7G 0 磁盘
─sda1 8:1 0 243.5M 0 部分 /boot
─sda2 8:2 0 1K 0 部分
└─sda5 8:5 0 558.5G 0部分
  ─root 254:0 0 9.3G 0 lvm /
  ─swap_1 254:1 0 21.8G 0 lvm [交换]
  └─主页 254:2 0 527.4G 0 lvm /opt
sr0 11:0 1 1024M 0 rom  

根分区非常小,我需要将其与主分区合并以形成一个分区。是否可以合并这些分区而不丢失数据?我担心如果任何一个分区中的数据丢失,我可能无法再次登录 - 我仅有的有 ssh 访问权限。如果出现问题,我无法物理访问该机器所在的数据中心。我不能直接插入 Live CD 并从那里重新分区。


我知道有很多 GUI 工具可以管理分区,我需要一个 CLI 解决方案。

答案1

假设你实际上有可用空间/opt,并且它是一个至少支持离线缩减的文件系统,最安全的做法是:

  1. 由于您的主目录在 上/opt,您无法登录到它 — 否则您将无法卸载/opt。解决此问题的一种方法是使用公钥通过 ssh 启用 root 登录。我面前没有 Ubuntu 机器,无法 100% 确定步骤,但应该只需编辑/etc/ssh/sshd_config以更改PermitRootLoginprohibit-password(或without-password,对于旧版本的 OpenSSH)。然后将您的公钥放入/root/.ssh/authorized_keys。另一种选择(由@bistoco 建议)是创建一个新用户,并在根文件系统上有一个主目录,例如:sudo mkdir /tmphome && sudo adduser --home /tmphome tmpuser && sudo adduser tmpuser sudo
  2. 确保您现在可以以 root 或新用户身份登录。从另一个终端执行此操作,在以 root 身份直接登录或通过新用户使用 sudo 登录之前,请勿注销其他会话(如果您不小心破坏了 sshd,这对于恢复至关重要)
  3. 以防万一,请登录第二个 root 会话。如果您以某种方式破坏了第一个会话,您可以使用它。
  4. 最后注销您的用户会话以及任何其他会话。
  5. 卸载/opt。如果umount /opt出现正在使用错误,请使用fuser -vm /opt(或其他方式)查看正在访问它的内容。您可能还需要停止某些服务,或找到另一个会话来注销。(如果您无法让 /opt 卸载,请转到步骤 10 以中止该过程)。
  6. 缩小卷通常需要 fsck,无论如何这都是个好主意。您可能需要添加-f以在干净的设备上强制执行 fsck。例如,fsck -f /dev/mapper/VGNAME-home。这可能需要一段时间。(如果 fsck 失败,请停止。检查拼写错误。如果真的失败了,那就出问题了。)
  7. 降低音量:lvreduce -Ay -r -L 100G VGNAME/home-r告诉它减少文件系统第一的100G是新的大小;随意选择(当然不能小于 上的数据量/opt)。这将花费很长时间,具体取决于卷上的数据量。如果由于不支持而失败,则无法正常工作。继续执行 9 以中止。(如果它失败并抱怨您要求它缩小太多,请选择更大的尺寸并重复该命令)。
  8. 扩大 rootfs:。lvextend -Ay -r -L 200G VGNAME/root再次强调,200G是大小,可以是任何您需要的大小(最多为所有可用空间)。告诉-r它调整文件系统的大小(扩大 LV 之后);通常这可以在线完成。如果不能……好吧,您的系统仍然可以访问,但您真的需要找到一种使用实时 CD 的方法。
  9. 不管这是否有效mount /opt
  10. 确保您可以再次以您的用户身份登录。在确认可以之前,请勿注销您的 root 会话。如果您使用 SSH 连接多路复用,请使用ssh -o ControlPath=none user@host以确保缓存的连接不会欺骗您。
  11. 启动所有您必须停止以卸载的服务/opt。至少在您希望它们运行的​​情况下。
  12. 将 ssh 设置改回不允许 root 登录(如果这是您选择的选项并且与之前一样)。请确保在注销之前可以登录新会话。更改 sshd 配置时务必执行此操作。或者,如果您创建了新用户,请使用以下命令将其删除:deluser --remove-home tmpuser

PS:您不需要扩大空间/以占用所有可用空间。如果需要,您可以随时再次扩展它 — 通常最好在 PV 中留出一些未分配的空间。

相关内容