将 Amazon EC2 ext4 EBS 卷转换为 XFS 文件系统

将 Amazon EC2 ext4 EBS 卷转换为 XFS 文件系统

我需要将我的 Amazon EC2 ext4 文件系统转换为 XFS 文件系统,这样我就可以拍摄一致的快照并将它们发送到 S3。我使用的是美国东部地区 i686 架构的 ubuntu 服务器 10.10 的自定义小图像。问题是我只为所有文件使用一个 EBS 驱动器,现在这让我很头疼,因为当我从 ssh 登录到实例时,我无法真正卸载、格式化或对驱动器执行任何操作。我猜我需要以某种方式将 EBS 卷分成 2 个,并将 /var/www 和 /var/lib 移动到第二个 EBS 卷,然后将其转换为 XFS。我正在使用 apache2、mysql、ispconfig、bind、postfix、courier、pureftp (http://www.howtoforge.com/perfect-server-ubuntu-10.10-maverick-meerkat-ispconfig-3

谢谢。

答案1

您可以将根卷转换为 XFS,也可以创建第二个卷。就我个人而言,我更喜欢后者,因为它提供了更大的灵活性。

选项1:将根卷转换为 XFS

  1. 停止您的实例(而不是终止)(我们称之为实例 A)
  2. 启动一个新实例(我们称之为实例 B)
  3. 从实例 A 分离根卷并将其附加到实例 B
  4. 创建第二个 EBS 卷,并将其附加到实例 B
  5. 将新的 EBS 卷格式化为 XFS(xfsprogs如果尚未完成,请安装)
  6. 将第一个卷中的所有数据复制到新卷(例如使用 rsync -aHAXxSP /source /target
  7. 从实例 B 分离新卷并将其附加为实例 A 的根卷
  8. 启动实例A
  9. 终止实例 B(原始根卷应该保留,保留它直到一切按您喜欢的方式运行)。

将根卷附加到另一个实例的原因是为了获得一致性,而对于正在使用的卷来说,这可能很困难。

选项 2:将数据移动到第二个 EBS 卷

  1. 创建第二个 EBS 卷并将其附加到您的实例;将其格式化为 XFS 并挂载
  2. 确定您想要移动到新卷的目录(需要考虑的一些目录包括:/var/log、/var/lib/mysql、/var/www、/var/spool/mail、/var/vmail)
  3. 停止尽可能多的服务以删除写锁
  4. 用于lsof | grep /path/to/dir检查剩余的写锁
  5. 将目录移动到新的 EBS 卷
  6. 将新目录绑定到其旧位置(即mount -o bind /mnt/path/to/dir /orig/path/to/dir
  7. 对每个目录重复此操作
  8. 启动服务以确保一切正常
  9. 编辑/etc/fstab文件以使挂载点永久生效;例如:/mnt/path/to/dir /orig/path/to/dir bind defaults,noatime,bind 0 0

重新启动以确保一切正常并正常运行。您可能还需要考虑稍微缩小根卷,因为希望它不会因为从中删除所有数据而增长(或改变)太多。

(值得一提的是,可以使用 来冻结 ext4 文件系统fsfreeze,它包含在 中util-linux-ng)。

相关内容