假设磁盘的位置从 0 到 4049 MB。如果分区 1 的大小为 50 MB,那么它占据的位置是从 0 到 49?
我的假设来自以下故事:
我正在尝试备份我的 Linux 系统(Raspberry PI)。然后我在 Google 上搜索如何操作并将其缩小到原来的大小,而不是备份整个 SD 卡。
然后我发现一个答案说我应该首先检查启动分区和主分区有多大(使用 gparted)。然后运行 dd,例如
dd if=/dev/sdb of=sysbackup.img bs=1M count=1024
所以这个计数与两个分区的大小相同。
但我认为 dd 只是按顺序扫描整个磁盘。这意味着分区也确实按顺序排列?
答案1
分区位置由分区表描述。目前最常见的两种分区表类型是主引导记录 (MBR)和GUID 分区表 (GPT)。细节有所不同,但在这两种情况下,磁盘的几个扇区都被留出用于描述每个分区的开始和结束位置,以及保存其他元数据,例如类型代码、名称(仅限 GPT)等。操作系统知道足够多的信息来查找磁盘上的分区表,确定它使用的类型(MBR、GPT 或更奇特的类型),然后将一系列扇区解释为与另一系列扇区不同的分区。
对于 MBR 和 GPT,分区表中分区的顺序以及分配给它们的分区号(例如/dev/sda1
vs. /dev/sda2
)不一定与分区在磁盘上的出现顺序相匹配。也就是说,/dev/sda2
可能占用扇区 40 到 1,126,439,也/dev/sda1
可能占用扇区 1,126,440 到 15,628,053,134。还可能存在未分区的空间(类似于没有书的书架部分)、分区系统使用的区域等。第一个分区的起点并非完全标准化,尽管有些值比其他值更常见。因此,如果您的目标是备份整个磁盘,则您有三种选择:
- 全盘备份
dd
--您可以对全部的磁盘,从扇区 0 到磁盘末尾。这将备份分区表、所有分区的内容以及磁盘未分区部分的所有内容。当您恢复此类备份时,它在操作系统看来就像原始备份一样(可能与磁盘型号和确切磁盘大小有关)。这是一种相当“愚蠢”的方法,因为它不需要了解磁盘上的分区、正在使用的分区表等。部分原因是,它也相对低效——您可能会备份磁盘上实际上未使用的区域,这可能会使备份的大小超出您的需要。这种低效虽然通常是一个缺点,但在某些情况下实际上可能是一个优势,例如,如果磁盘的数据结构严重损坏——您可以尝试使用备份来恢复数据,而不必担心损坏原始数据。同样,即使您没有解密密钥,也可以备份加密磁盘。 - 整个分区备份-- 您可以使用
dd
或类似工具对每个分区执行“哑”备份。恢复备份时,您需要创建一个新的分区表,该表可能应该与原始表匹配。因此,您可能需要备份分区表本身,或者至少记录每个分区的大小。(备份dd
文件大小可能会提供此信息。)与整个磁盘备份一样,这种备份可能空间效率低下,除非大多数磁盘未分区和/或分区本身大部分已满。恢复需要更多“智能”,并且由于恢复的磁盘可能与原始磁盘不完全匹配,因此某些操作系统和工具可能会停止工作。例如,磁盘可能无法启动。这种方法基本上是其他两种方法之间的折衷。 - 文件系统感知备份-- 在这种方法中,您使用的工具可以理解每个分区上使用的文件系统 -- 也就是说,该工具可以读取 NTFS、FAT、ext4fs、HFS+ 或每个分区使用的任何文件系统。这可以使用诸如
cp
、tar
或zip
之类的东西来备份文件,使用操作系统本身来处理文件系统;或者它可以是一个文件系统特定的工具,可以在较低级别进行备份,同时忽略文件系统中未使用的部分。无论哪种方式,这种方法都需要比其他任何方法更多的“智能”,但优点是备份可能更快,占用的磁盘空间更少。缺点是您需要工具中的更多“智能”来恢复备份。您可能需要采取额外的步骤来使恢复的磁盘再次可启动,并且您肯定需要备份分区表本身或了解足够的信息来重新创建兼容的内容。如果原始文件系统已损坏,则这种类型的备份是一个糟糕的选择,因为读取文件系统的工具可能会变得混乱,遗漏关键数据,甚至崩溃。
你想使用哪种工具取决于你的需求。如果你想要快速备份或占用最少空间的备份和如果原始文件完好无损,则需要使用文件系统感知备份工具。如果磁盘较小或已损坏,则全磁盘(或至少全分区)备份可能更好。
如果是整个分区或文件系统感知备份,则应备份分区表。具体操作取决于分区表类型。在某些情况下,记录分区工具的输出就足够了。例如,您可以将sudo fdisk -l /dev/sda
输出键入并剪切粘贴到文本文件中,以记录分区数据/dev/sda
。某些工具提供了更详细地记录数据的方法。例如,我自己的 GPT fdisk(gdisk
、cgdisk
和sgdisk
)可以将 GPT 数据备份到二进制文件。这可以通过主菜单b
上的选项、 中的“备份”项或 的/命令行选项来完成。是否需要简单记录分区工具的显示或像 GPT fdisk 生成的详细二进制备份文件取决于您的需求,您没有详细说明,我无法提供建议。gdisk
cgdisk
-b
--backup
sgdisk
有关磁盘分区的更多信息,请参见: