如何更改 RAID 1 中分区的文件系统?

如何更改 RAID 1 中分区的文件系统?

首先,如果问题已经被提出并得到正确回答,我很抱歉,我没有找到任何令我满意的东西。

我在数据中心租了一台专用机器,该机器运行 Debian 10 并且有两个 RAID 1 中的驱动器,有 3 个分区:一个用于启动,一个用于交换,一个用于休息。

第三个(/dev/md2)使用 ext4 文件系统,但我想使用 XFS。

我不习惯更改文件系统,这是我第一次拥有带有 RAID 的机器,所以我不知道该怎么做。

这是一个新安装,因此不存在丢失数据的风险。

我尝试了一下mkfs.xfs /dev/md2但没有效果:

root@Debian-105-buster-64-minimal ~ # mkfs.xfs /dev/md2
mkfs.xfs: /dev/md2 contains a mounted filesystem

而且我不知道应该如何根据 RAID 卸载/安装它。

提前感谢您的帮助。

命令df -Th

root@Debian-105-buster-64-minimal ~ # df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs   32G     0   32G   0% /dev
tmpfs          tmpfs     6.3G  516K  6.3G   1% /run
/dev/md2       ext4      437G  1.2G  413G   1% /
tmpfs          tmpfs      32G     0   32G   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs      32G     0   32G   0% /sys/fs/cgroup
/dev/md1       ext3      487M   53M  409M  12% /boot
tmpfs          tmpfs     6.3G     0  6.3G   0% /run/user/1000

命令fdisk -l

root@Debian-105-buster-64-minimal ~ # fdisk -l
Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: SAMSUNG MZVLB512HAJQ-00000
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0289e0d1

Device         Boot    Start        End   Sectors   Size Id Type
/dev/nvme0n1p1          2048   67110911  67108864    32G fd Linux raid autodetect
/dev/nvme0n1p2      67110912   68159487   1048576   512M fd Linux raid autodetect
/dev/nvme0n1p3      68159488 1000213167 932053680 444.4G fd Linux raid autodetect


Disk /dev/nvme1n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: SAMSUNG MZVLB512HAJQ-00000
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xbcb5c0d2

Device         Boot    Start        End   Sectors   Size Id Type
/dev/nvme1n1p1          2048   67110911  67108864    32G fd Linux raid autodetect
/dev/nvme1n1p2      67110912   68159487   1048576   512M fd Linux raid autodetect
/dev/nvme1n1p3      68159488 1000213167 932053680 444.4G fd Linux raid autodetect


Disk /dev/md1: 511 MiB, 535822336 bytes, 1046528 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/md0: 32 GiB, 34325135360 bytes, 67041280 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/md2: 444.3 GiB, 477076193280 bytes, 931789440 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

mdstat:

root@Debian-105-buster-64-minimal ~ # cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 nvme0n1p3[0] nvme1n1p3[1]
      465894720 blocks super 1.2 [2/2] [UU]
      bitmap: 0/4 pages [0KB], 65536KB chunk

md0 : active (auto-read-only) raid1 nvme0n1p1[0] nvme1n1p1[1]
      33520640 blocks super 1.2 [2/2] [UU]
        resync=PENDING

md1 : active raid1 nvme0n1p2[0] nvme1n1p2[1]
      523264 blocks super 1.2 [2/2] [UU]

unused devices: <none>

答案1

/dev/md2 是您的根文件系统,因此如果您只是格式化它,则意味着您的服务器将永远消失。所以这就是为什么 mkfs 拒绝格式化正在运行的已安装文件系统的一个很好的理由。

看到你问的备份和恢复服务器的问题完全超出了你现在的能力范围。

由于您这台机器上还没有任何数据,只需使用您选择的文件系统重新安装它,这是实现您的目标最简单、最安全的方法。

答案2

要清楚:“mkfs”会删除分区上的所有内容(我们通常称之为“格式化”)。您只能“格式化”未挂载(未使用)的分区,并且不能卸载根(系统)分区。您唯一的选择是从头开始重新运行安装,并在设置磁盘时更改默认选项。

但是,我不知道您为何要将根文件系统格式化为 XFS。XFS 最适合大型(如 50 TB 到 2 PB)文件系统,通常用于非常快的设备(如大型 RAID 阵列)。ext4 非常适合用作根文件系统,并且 XFS 很可能不会为您的配置提供任何有价值的东西。

答案3

您认为 RAID 比实际情况更神奇。一旦 RAID 设置完成并开始工作,那么从实际角度来看,RAID 设备上的分区与任何其他类型设备上的分区之间绝对没有任何区别。

因此,要重新格式化 RAID 分区,您首先需要像卸载任何其他已安装的分区一样使用 卸载它umount /dev/md2。然后您可以运行mkfs.xfs /dev/md2以创建文件系统,然后再次安装它。

尽管如此,您无法在您的特定设置上遵循这些说明。原因是这/dev/md2是您的根文件系统。根文件系统必须在机器运行时保持挂载状态,因此命令umount将失败。重新格式化根分区需要几个额外的步骤:

  1. 备份您想要保留的所有数据。

  2. 从 Live CD 启动,最好与您想要的新操作系统是同一个发行版。

  3. 通常情况下,Live CD 会自动检测您的 RAID 阵列,因此您可以立即使用它。如果没有,您必须重新创建阵列才能访问分区。(注意:这是仅有的RAID 阵列上的分区与任何其他类型磁盘上的分区之间的步骤有所不同。)

  4. 运行mkfs.xfs <device>。(注意:不能保证 Live CD 将使用与原始操作系统相同的名称来调用分区,因此您必须检查。)

  5. 在新的空白 XFS 文件系统上安装您选择的操作系统。

  6. 重新启动进入新的操作系统,安装您需要的任何软件,并恢复您在步骤1中备份的数据。

答案4

这是您当前的磁盘布局。

  +-----+      +-------+     +------------------------+
  |     |      |       |     |                        |
+-----------+--------------+-----------------------------+
| nvme0n1p1 |   nvme0n1p2  | nvme0n1p3                   | <- Disk0 nvme0n1
+-----------+--------------+-----------------------------+
  |     |      |       |     |                        |
+-----------+--------------+-----------------------------+
| nvme1n1p1 |   nvme1n1p2  |  nvme1n1p3                  | <- Disk1 nvme1n1
+-----------+--------------+-----------------------------+
  |     |      |       |     |                        |
  | md0 |      |  md1  |     |          md2           |
  +-----+      +-------+     +------------------------+
   Swap          /boot            /  (the root disk)

因此您有三个独立的 Linux 软件 RAID1 分区。

md1 和 md2EXT4上有一个文件系统,并且您的文件位于该文件系统中。md0 有一个交换文件系统,没有文件。

要更改文件系统,您必须备份数据、重建文件系统并恢复数据。

这样做需要您需要从另一个磁盘(如 LiveCD 或救援磁盘)启动,因为您正在处理根文件系统。

你说这个盒子在数据中心。所以你必须去 DC 并在那里工作,或者如果硬件是服务器级设备,那么它将有某种带外管理控制台,如 ILO(HP)或 DRAC(Dell)或 CIMC(cisco)或 RSA(IBM)或 IPMI 接口(更通用的短语,由 Supermicro 和其他制造商使用)
无论如何,主机将是中止服务当你在处理这件事情的时候。

如果您有数据,这里建议计划#1:

请注意,这篇文章很长、很复杂,而且无疑有一些错误。你应该查看下面的计划#2。

  1. 检查您的备份是否正常工作。如果情况不妙,您将需要它们。
  2. 整理备用磁盘 - 您有约 500 GB,但并未全部使用。根据您的df输出, 4 GB 笔式磁盘可能就足够了
  3. 安排停机时间或维护时间。如果您认为这将花费 10 分钟,请将其设置为 4 小时。
  4. 安排一次与你的 DC 的访问。有些 DC 的要求比其他的更严格。有些 DC 不允许无人看管地访问数据楼层,如果你与其他客户共用一个机架,情况就更是如此。
  5. 向 DC 索要一辆应急车,如果他们没有,就准备一个可以正常工作的显示器/键盘/鼠标、电源线和多路盒。
  6. 下载适用于您的发行版的最新 ISO。创建 CD 或 USB 磁盘并在一些备用机上测试它是否正常工作。

当日:

  1. 提醒所有受影响的人注意计划停电及其后果(即Foo 服务器今晚将停止服务,这意味着从晚上 10 点到早上 6 点无法访问 Foo 系统
  2. 带上一件暖和的外套/帽子和耳罩——DC 可能会很冷而且很吵。
  3. 在窗口前到达 DC,连接并确保您有可用的控制台
  4. 连接您的临时 USB 磁盘,对其进行格式化,然后对数据进行脏 rsync。1.2 GB 不会花费很长时间。

当时

  1. 按时关闭服务器并从发行版的实时磁盘启动到实时环境并获取 root 权限。
  2. 组装 RAID 分区(这里不是必需的,因为它们是 RAID1,并且每个磁盘都是可读的)
  3. 安装 raid 时,md2 为 /oldbox,md1 为 /oldbox/boot
  4. 将其他 USB 磁盘安装为 /x 或其他明显不同的名称
  5. 使用类似的方法进行最后的转储 time rsync -avH /oldbox* /x --progress --delete 并等待。
  6. 重复上述命令 - 不会有任何文件发生改变并且第二次执行应该会快速完成。
  7. df -h /x 上显示的文件数量应该与 /oldbox 上显示的文件数量大致相同
  8. umount /x 并将其从主机中删除。这是为了保护您的数据。
  9. 卸载 /oldbox/boot 和 /oldbox。

已到达无可挽回的地步,而且很难回头。

  1. 使用类似以下命令创建新的文件系统:
    mkfs.xfs -L rootdisk /dev/md2它们mkfs.xfs -L bootdisk /dev/md1 可能需要-f覆盖现有的文件系统
  2. 将 Live OS 中的新磁盘挂载到 /oldbox 和 /oldbox/boot
  3. 重新添加您的 USB 磁盘并将其以 /xmount -o ro /dev/sda1 /x 或类似方式以只读方式安装。
  4. 使用 rsync 将数据同步回来 time rsync -avH /x/* /oldbox/ --progress --delete
  5. 去喝杯咖啡/呼吸新鲜空气/等等,让这一切结束吧。
  6. 在命令提示符下, chroot /oldbox 这将为您提供“在新磁盘中”的根提示符
  7. mount /dev/ 为您提供 chroot 中的设备节点。
  8. 检查 /oldbox/etc/fstab 的内容 - 如果它提到磁盘的 UUID,则需要更新。
  9. 使用它重新安装 grubgrub-install 它应该安装到 /dev/nvme0n1 和 1n1 上的 MBR 中
  10. 卸载所有磁盘,拔下USB磁盘并保存。
  11. 重新启动并希望它能正常工作。

请注意,这个过程是我凭空想出来的,毫无疑问我漏掉了一些步骤。你可能想在工作时设置一台有两块磁盘的备用计算机,然后像在生产环境中一样安装带有 EXT4 和 raid1 的 Debian,然后先离线尝试这个过程。你甚至可以在虚拟机中进行预测试。


计划 #2:更简单的方法

您的磁盘上只有 1.2 GB 的文件。是否有任何服务正在运行?如果没有,请按照上述说明进行备份,然后格式化整个机器。从头开始安装,然后仅恢复您需要的数据部分。您可能选择使用 LVM,但这更复杂。

结论:创建新文件系统会删除旧文件系统中的文件。并且无法在主机运行时更改根文件系统。

相关内容