没有分区的磁盘如何“分区”而不丢失数据?

mag*_*nus 8 partition fdisk btrfs resize2fs disk

我有一个用于备份的 1TB 便携式硬盘驱动器。整个驱动器 ( /dev/sdb) 已格式化为ext4文件系统。

我一直在阅读有关的利益btrfs进行备份(校验,自我修复,等等),并正在考虑这个磁盘从转换ext4btrfs

我很确定我仍然可以调整磁盘大小(e2fsck -f /dev/sdb && resize2fs /dev/sdb 500G && fdisk /dev/sdb,或大约)。但是,我不确定如何将分区“引入”到没有分区的设备。

这可以做到吗,如果可以,怎么做?

(请注意,文件系统本身 - ext4btrfs等 - 几乎无关紧要 - 问题纯粹是关于对最初创建时没有分区的设备进行分区 - 并且这样做不会丢失现有文件系统。)

Ste*_*itt 7

分区表(至少是 MBR 或 GPT 样式)位于磁盘的开头和/或结尾,因此如果您可以释放所需的空间,则可以引入它们。

使用 TB 磁盘,我将按以下步骤进行。

  1. 将 ext4 文件系统的大小调整为 499G(安全起见是错误的)。这确保所有数据、文件系统结构等都适合磁盘上前 499G 的块。理想情况下,您应该尽可能地减少文件系统,这将减少您在后续步骤中需要复制的数据量。
  2. 使用dd或类似工具将块复制到磁盘的后半部分。
  3. 对磁盘进行分区,创建一个比文件系统(500G)稍大的分区。为此使用 GPT;您将覆盖磁盘开头和结尾的块,因此磁盘开头的文件系统副本现在是 toast。
  4. 将原始块从磁盘的后半部分复制到新创建的分区,再次使用dd或类似的东西。您需要根据您在第 2 步中所做的来计算偏移量和大小,但目标很简单 ( /dev/sdX1)。
  5. 再次调整文件系统的大小,使其占据所有分区。

使用ddrescue可以反向复制的工具,您可以稍微简化一下:

  1. 尽可能调整源文件系统的大小。
  2. 计算第一个分区的开始位置(无需实际创建分区表)。
  3. 移动组成源文件系统的块,以便它们从第一个分区开始的地方开始。(这是您需要从最后开始复制的地方。)
  4. 对磁盘进行分区。
  5. 调整文件系统的大小。

鉴于涉及的复制量,将数据备份到其他地方并恢复它会更容易!您可以通过保存 ext4 文件系统的开头并恢复其后的其余数据来限制复制量,但这需要更仔细的簿记。


小智 -2

我很困惑。

你说磁盘格式化为ext4,所以你确实有一个分区。也许 fdisk 没有显示它,因为磁盘的分区表是 gpt 并且您的 fdisk 不支持它。在这种情况下你可以使用parted

sudo parted -l /dev/sdb
Run Code Online (Sandbox Code Playgroud)

除此之外,您还可以将 ext4 转换为 btrfs,如本 arch linux 指南 中所述

  • 错误的。即使是*现有文件系统*上的常规文件也可以被视为文件系统。试试这个: `dd if=/dev/zero of=/tmp/my.ext4 bs=$((1024 * 1024)) count=1 && mkfs.ext4 -F /tmp/my.ext4 && mkdir /tmp/my .ext4.mounted && sudo mount -t ext4 /tmp/my.ext4 /tmp/my.ext4.mounted && ls -l /tmp/my.ext4.mounted`。您应该看到一个“lost+found”目录。如果常规文件可以是文件系统,那么整个块设备也可以。 (2认同)
  • 不幸的是,很多人直接使用驱动器而根本没有对其进行分区。并且在出现野生分区表后遭受数据丢失...由某些认为驱动器为空的工具或其他工具创建的... (2认同)