将分区重新映射到新磁盘的正确方法是什么?

将分区重新映射到新磁盘的正确方法是什么?

我目前运行一个运行 Debian 的 Web 服务器。我有一个 1GB 磁盘,其中有一个 ext4 分区映射到/,还有一个 8GB 磁盘,其中有一个 ext4 分区映射到/var/www

在没有安装数据库的情况下,1GB 磁盘已占用 70%。一旦我安装 psql,我的/var1GB 磁盘可能就会被占满。

所以我想要做的是将 8GB 磁盘上的 ext4 大小调整为 4GB,并使用可用空间创建另一个分区。

现在,我在心里想出了以下步骤:

  1. umount并使用resize2fs(或parted)调整 8GB 磁盘上的分区大小。
  2. parted在可用空间上创建一个新的 4 GB 分区。
  3. mount新的分区说/media/new
  4. cp -a/var将我的从 1GB 分区复制到新的 4GB 分区。(或者我应该使用tar它吗?)
  5. 在以下位置添加新分区的条目fstab
  6. /var删除我的 1GB 磁盘和/var/www新分区中的冗余内容。

我以前从未做过这样的事情,所以有人可以验证我的步骤并看看我是否遗漏了什么吗?

PS。我做了一个du --max-depth=1,看起来除了占用的 200MB 之外/var,还分配了 300MB 给/usr和 200MB 给/lib。我也应该移动这些吗?

答案1

您实际上不必重新对磁盘进行分区即可实现此目的。另一种解决方案是使用mount -o bind

  1. 停止服务器上运行的所有服务,并确认没有打开 /var 的句柄lsof | grep /var- 如果有,请终止持有它们的进程。
  2. 卸载你的 8GB 驱动器(/var/www)并将其安装在其他位置(例如 /mnt)
  3. 在您的 8GB 磁盘上,将全部内容移动到一个文件夹 - 我们称之为“www”。
  4. 将 /var/ 移动到您的 8GB 驱动器(为了安全起见,您可能需要复制并重命名原始文件)(因此,您现在有两个文件夹 /mnt/www 和 /mnt/var)
    • (由于 /var/www 位于 var 中,因此此时将其移动到那里更为简单(即mv /mnt/www /mnt/var/,尽管您应该能够设置嵌套挂载)
  5. 挂载绑定/var:mount -o bind /mnt/var /var
  6. 附加到 fstab:

    /mnt/var /var 绑定默认值,noatime,bind 0 0
  7. 检查一切是否正常,并恢复正常运行

这种方法应该提供相同的功能,但风险较小(无需重新分区/调整文件系统大小),而且灵活性更高 - 如果您想添加两个或三个文件夹,则不必继续创建新的分区。

顺便说一句,将整个 /var 移动到第二个磁盘不是我的首选,我倾向于移动存储数据的目录而不是存储程序的目录,例如以下目录:(您可能会发现 /var/log 和 /var/lib 占用了 /var 中的大部分空间)。

  • /var/日志
  • /var/lib/pgsql
  • /var/spool/mail (和/或 /var/vmail)
  • /var/www(您已经移动过)

相同的过程可应用于大多数目录(除了像 /boot 这样的目录)。此外,您可以考虑使用 rsync 而不是 cp,如果某些文件被锁定等,并且您必须再次运行它,那么它可能更宽容。

相关内容