如何更改 AWS EBS 卷文件系统类型

How to change AWS EBS volume filesystem type

EBS 卷作为 ext4 附加在 /opt/apps 上。目前没有关于它的数据。如何将文件系统类型更改为 xfs 并将新的挂载点分配给 /data?

[centos@ip-10-24-xx-xxx ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     xfs       8.0G  1.4G  6.7G  17% /
devtmpfs       devtmpfs  7.3G     0  7.3G   0% /dev
tmpfs          tmpfs     7.2G     0  7.2G   0% /dev/shm
tmpfs          tmpfs     7.2G   17M  7.2G   1% /run
tmpfs          tmpfs     7.2G     0  7.2G   0% /sys/fs/cgroup
/dev/xvdb      ext4       99G   61M   94G   1% /opt/apps
tmpfs          tmpfs     1.5G     0  1.5G   0% /run/user/1000

这并非特定于 AWS EBS。 Amazon 为您提供了一个名为 EBS 的 "disk",附加到 /dev/xvdb。然后,随意将它挂载到任何地方(/opt/apps,或 /data)并用你想要的文件系统格式化它。

这个页面可以帮助你 http://ask.xmodulo.com/create-mount-xfs-file-system-linux.html

看到您有两种选择来实现您的用例。

您可以将根卷转换为 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

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

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