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

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

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

我一直在阅读有关btrfs备份的好处(校验和、自我修复等)的信息,并且正在考虑将此磁盘ext4btrfs.

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

这可以做到吗?如果可以,如何做到?

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

答案1

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

使用 TB 磁盘时,我将按如下方式进行。

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

使用诸如ddrescue可以反向复制,你可以稍微简化一下:

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

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

答案2

我成功地对 2 TB 驱动器进行了重新分区,没有丢失任何数据。我想从 GNU/Linux 机器和 Windows 机器执行备份,因此我将 EXT4 分区缩小到 1 TB,并创建了一个新的 1 TB 分区,并将其格式化为 NTFS 文件系统。

我所需要做的就是使用 Ubuntu 中的 GUI Disks 应用程序。其他发行版应该有类似的 GUI 应用程序来管理分区。我想使用 BTRFS 而不是 NTFS 也会同样有效。

当然,您还应该能够从终端执行重新分区。

答案3

我很困惑。

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

sudo parted -l /dev/sdb

除此之外,您还可以将 ext4 转换为 btrfs正如这个 arch Linux 指南中所说

相关内容