我需要将我的 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
- 停止您的实例(而不是终止)(我们称之为实例 A)
- 启动一个新实例(我们称之为实例 B)
- 从实例 A 分离根卷并将其附加到实例 B
- 创建第二个 EBS 卷,并将其附加到实例 B
- 将新的 EBS 卷格式化为 XFS(
xfsprogs
如果尚未完成,请安装) - 将第一个卷中的所有数据复制到新卷(例如使用
rsync -aHAXxSP /source /target
) - 从实例 B 分离新卷并将其附加为实例 A 的根卷
- 启动实例A
- 终止实例 B(原始根卷应该保留,保留它直到一切按您喜欢的方式运行)。
将根卷附加到另一个实例的原因是为了获得一致性,而对于正在使用的卷来说,这可能很困难。
选项 2:将数据移动到第二个 EBS 卷
- 创建第二个 EBS 卷并将其附加到您的实例;将其格式化为 XFS 并挂载
- 确定您想要移动到新卷的目录(需要考虑的一些目录包括:/var/log、/var/lib/mysql、/var/www、/var/spool/mail、/var/vmail)
- 停止尽可能多的服务以删除写锁
- 用于
lsof | grep /path/to/dir
检查剩余的写锁 - 将目录移动到新的 EBS 卷
- 将新目录绑定到其旧位置(即
mount -o bind /mnt/path/to/dir /orig/path/to/dir
) - 对每个目录重复此操作
- 启动服务以确保一切正常
- 编辑
/etc/fstab
文件以使挂载点永久生效;例如:/mnt/path/to/dir /orig/path/to/dir bind defaults,noatime,bind 0 0
重新启动以确保一切正常并正常运行。您可能还需要考虑稍微缩小根卷,因为希望它不会因为从中删除所有数据而增长(或改变)太多。
(值得一提的是,可以使用 来冻结 ext4 文件系统fsfreeze
,它包含在 中util-linux-ng
)。