首先,如果问题已经被提出并得到正确回答,我很抱歉,我没有找到任何令我满意的东西。
我在数据中心租了一台专用机器,该机器运行 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
将失败。重新格式化根分区需要几个额外的步骤:
备份您想要保留的所有数据。
从 Live CD 启动,最好与您想要的新操作系统是同一个发行版。
通常情况下,Live CD 会自动检测您的 RAID 阵列,因此您可以立即使用它。如果没有,您必须重新创建阵列才能访问分区。(注意:这是仅有的RAID 阵列上的分区与任何其他类型磁盘上的分区之间的步骤有所不同。)
运行
mkfs.xfs <device>
。(注意:不能保证 Live CD 将使用与原始操作系统相同的名称来调用分区,因此您必须检查。)在新的空白 XFS 文件系统上安装您选择的操作系统。
重新启动进入新的操作系统,安装您需要的任何软件,并恢复您在步骤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。
- 检查您的备份是否正常工作。如果情况不妙,您将需要它们。
- 整理备用磁盘 - 您有约 500 GB,但并未全部使用。根据您的
df
输出, 4 GB 笔式磁盘可能就足够了 - 安排停机时间或维护时间。如果您认为这将花费 10 分钟,请将其设置为 4 小时。
- 安排一次与你的 DC 的访问。有些 DC 的要求比其他的更严格。有些 DC 不允许无人看管地访问数据楼层,如果你与其他客户共用一个机架,情况就更是如此。
- 向 DC 索要一辆应急车,如果他们没有,就准备一个可以正常工作的显示器/键盘/鼠标、电源线和多路盒。
- 下载适用于您的发行版的最新 ISO。创建 CD 或 USB 磁盘并在一些备用机上测试它是否正常工作。
当日:
- 提醒所有受影响的人注意计划停电及其后果(即Foo 服务器今晚将停止服务,这意味着从晚上 10 点到早上 6 点无法访问 Foo 系统)
- 带上一件暖和的外套/帽子和耳罩——DC 可能会很冷而且很吵。
- 在窗口前到达 DC,连接并确保您有可用的控制台
- 连接您的临时 USB 磁盘,对其进行格式化,然后对数据进行脏 rsync。1.2 GB 不会花费很长时间。
当时
- 按时关闭服务器并从发行版的实时磁盘启动到实时环境并获取 root 权限。
- 组装 RAID 分区(这里不是必需的,因为它们是 RAID1,并且每个磁盘都是可读的)
- 安装 raid 时,md2 为 /oldbox,md1 为 /oldbox/boot
- 将其他 USB 磁盘安装为 /x 或其他明显不同的名称
- 使用类似的方法进行最后的转储
time rsync -avH /oldbox* /x --progress --delete
并等待。 - 重复上述命令 - 不会有任何文件发生改变并且第二次执行应该会快速完成。
df -h
/x 上显示的文件数量应该与 /oldbox 上显示的文件数量大致相同- umount /x 并将其从主机中删除。这是为了保护您的数据。
- 卸载 /oldbox/boot 和 /oldbox。
已到达无可挽回的地步,而且很难回头。
- 使用类似以下命令创建新的文件系统:
mkfs.xfs -L rootdisk /dev/md2
它们mkfs.xfs -L bootdisk /dev/md1
可能需要-f
覆盖现有的文件系统 - 将 Live OS 中的新磁盘挂载到 /oldbox 和 /oldbox/boot
- 重新添加您的 USB 磁盘并将其以 /x
mount -o ro /dev/sda1 /x
或类似方式以只读方式安装。 - 使用 rsync 将数据同步回来
time rsync -avH /x/* /oldbox/ --progress --delete
- 去喝杯咖啡/呼吸新鲜空气/等等,让这一切结束吧。
- 在命令提示符下,
chroot /oldbox
这将为您提供“在新磁盘中”的根提示符 mount /dev/
为您提供 chroot 中的设备节点。- 检查 /oldbox/etc/fstab 的内容 - 如果它提到磁盘的 UUID,则需要更新。
- 使用它重新安装 grub
grub-install
它应该安装到 /dev/nvme0n1 和 1n1 上的 MBR 中 - 卸载所有磁盘,拔下USB磁盘并保存。
- 重新启动并希望它能正常工作。
请注意,这个过程是我凭空想出来的,毫无疑问我漏掉了一些步骤。你可能想在工作时设置一台有两块磁盘的备用计算机,然后像在生产环境中一样安装带有 EXT4 和 raid1 的 Debian,然后先离线尝试这个过程。你甚至可以在虚拟机中进行预测试。
计划 #2:更简单的方法
您的磁盘上只有 1.2 GB 的文件。是否有任何服务正在运行?如果没有,请按照上述说明进行备份,然后格式化整个机器。从头开始安装,然后仅恢复您需要的数据部分。您可能选择使用 LVM,但这更复杂。
结论:创建新文件系统会删除旧文件系统中的文件。并且无法在主机运行时更改根文件系统。