再一次,在这里我试图围绕一些 HDD 和文件系统概念。
当 Windows 将驱动器显示为“未分配空间”并提示初始化驱动器时,这究竟意味着什么 -驱动器上没有文件系统,或者只是文件系统不被 Windows 识别?
未分配空间的概念是 Windows 的概念还是硬盘驱动器的概念——换句话说,其他操作系统是否可以写入未分配的空间?
如果是这样,这是否意味着在 Windows 之外,文件系统不需要写入硬盘驱动器?
再一次,在这里我试图围绕一些 HDD 和文件系统概念。
当 Windows 将驱动器显示为“未分配空间”并提示初始化驱动器时,这究竟意味着什么 -驱动器上没有文件系统,或者只是文件系统不被 Windows 识别?
未分配空间的概念是 Windows 的概念还是硬盘驱动器的概念——换句话说,其他操作系统是否可以写入未分配的空间?
如果是这样,这是否意味着在 Windows 之外,文件系统不需要写入硬盘驱动器?
是的,任何操作系统总是可以写入任何磁盘位置,无论是在分区内部还是外部。
分区只不过是操作系统同意使用的区域列表——磁盘始终充当单个连续存储介质,而不是
知道关心被分区。(实际上,分区表本身存储在同一个磁盘上,扇区 0-32ish,当工具喜欢
fdisk
或diskpart
编辑分区时,它们所做的只是更新存储在这些扇区中的表。)对于大多数操作系统来说,这并不是绝对必要的。具有足够权限的程序可以打开原始设备文件,例如
/dev/sda4
在 Linux 或\\.\Device\Harddisk5\DR5
Windows 上,并将字节读/写到任何位置。该程序实际上可以通过这种方式发明自己的私有文件系统,或者使用其他一些结构(例如,有将数据库写入原始分区的 SQL 数据库引擎)。或者它可以在任何地方转储数据。
如您所知,文件系统仅允许操作系统中的所有程序共享相同的驱动器或分区。操作系统负责空间分配、可靠性等,程序不需要考虑文件和文件夹以外的任何事情。
当“磁盘管理”应用程序提示要初始化驱动器时,这意味着它甚至无法识别分区表(应该指示哪些区域已分配,哪些未分配)。
Windows 可以理解 MBR 和 GPT 分区表,但是当出现这个提示时,意味着两者都没有找到。因此,Windows 甚至没有到查看文件系统的地步——它不知道文件系统在哪里(如果有的话)。
但是,当 Windows 发现一个文件系统无法识别的分区时,“磁盘管理”不会提示格式化或以其他方式覆盖它 - 它只是显示该分区具有无法识别的文件系统,通常简称为“RAW”。
当其他操作系统在 MBR 或 GPT 磁盘上创建分区时,它们通常会尊重现有的分区表并且不会开始使用不同的分区表。因此,如果例如 Linux 或 FreeBSD 创建了自己的分区,它们将在磁盘管理中作为实际分区可见——只要它们在 MBR 或 GPT 中,它们就不会因为文件系统被简单地变成“未分配空间”。未识别。
但是,不要将 DiskMgmt 的初始化磁盘提示与 Windows 资源管理器的格式化磁盘提示混淆。前者是关于未知分区表,而后者是关于已知分区中的未知文件系统。
(有时 Windows 不小心将驱动器号分配给未知文件系统,尝试通过 Windows 资源管理器打开它会导致“格式化”提示。)
简而言之:
提示初始化磁盘 ⇒ 未找到分区表(MBR 或 GPT)。磁盘可能是空的,或者它可能使用非标准分区表,例如 APM。
没有提示,但显示了未分配的空间 ⇒ 空间确实未分配。磁盘的分区表没有对应于该区域的条目。
无提示,但显示未知分区 ⇒ 该分区包含无法识别的文件系统。
提示格式化磁盘 ⇒ 分区包含无法识别的文件系统。
让我们首先解释一下硬盘驱动器的工作原理。
显然,硬盘驱动器有空间。您在整个驱动器上创建一个分区方案,然后用分区填充它。分区是分区空间中具有固定大小的预留。(这是一个非常基本的解释。如果我将 RAID 添加到混合中,我担心答案会变得不必要的复杂)
如果您的硬盘驱动器只有一个分区,并且其大小小于硬盘的大小,则还有空间留给另一个分区。该位称为未分配空间。
现在,这是否意味着您总是可以在那里创建一个分区?否。有可能另一个操作系统在该空间中创建了一个您的操作系统完全不熟悉的分区。
如果是这种情况,您的操作系统会将其视为未知分区,或者在最坏的情况下视为未分配空间。如果您在未分配空间中创建一个实际上由另一个操作系统分配的分区,则大多数情况下您将破坏先前的分区。
还有另一种可能性,驱动器具有您的操作系统不熟悉的分区方案。如果是这种情况,操作系统会认为驱动器未初始化,并要求您对其进行初始化。在 Windows 中,它可以是 GPT 或 MBR,但在某些已知情况下,驱动器(或 SD 卡等)被格式化为特殊设备,其独特的格式是一种安全形式。
按照惯例,硬盘驱动器(或其等价物,例如 USB 拇指驱动器)上面有一个分区表。MBR(主引导记录)样式的分区表适合驱动器开头(扇区号 0)的一个扇区(512 字节)。MBR 还包含一个引导加载程序,因此分区表空间被限制为四个“主”分区(尽管一些 1980 年代的软件支持八个分区)。每个 MBR 分区条目具有:
由于最多四个分区很快就不能容忍了,附加分区的机制是 MBR 中的“扩展分区”,其中一个特殊标记的分区可以有一个包含另一个分区表的嵌入式 MBR。因此,尽管某些分区工具可能会造成一些人为限制,但可以将磁盘划分为数十个分区。
GPT本质上不限于四个分区。它的基础在磁盘上占用超过 512 字节,通常在 4 到 16 兆字节范围内。但是分区的含义是一样的。
磁盘的每个扇区都包含在其中的磁盘分区表具有“没有未分配的空间”,这是最常用的短语。因此,您的问题的通常答案是未分配空间是所有分区之外的空间。但是,如果将分区标记为类型零(原始),则会出现术语歧义,因此可能存在将原始分区视为在某种意义上未分配的工具。
这意味着没有分区表或所有分区条目都是空的。Windows 很乐意忽略无法识别的文件系统。
这是所有支持 PC 软件的标准操作系统都遵守的硬盘约定。不确定“换句话说”是什么意思。是的,可以写入未分配的空间(即使在 Windows 中),但正确的做法是创建一个包含未分配空间的分区,在其中格式化文件系统(写入“未分配空间”),然后写入文件和目录。
对于一个表现良好的系统,不。协作系统需要文件系统到位,权限设置适当等。但是,在 Linux 中(例如)将磁盘本身作为大文件打开(原始磁盘访问)并直接写入它是微不足道的。它需要管理权限和一些指导或计算来确定在哪里写入。
但是,忽略文件系统和分区是不好的。它们极大地改进了磁盘管理,使生活更轻松、更理智。最终,有可能编写完全忽略理智和良好举止并在磁盘上任意位置写入的叛逆软件。
但是,我从这个问题中感知到的元性可能会误解您是否打算遵守 Windows、Linux 等中非管理员/非系统模式所施加的权限和限制。
其他答案已经说明了很多,我将添加更多细节以填补一些空白。
作者提出的问题之一是:
实际上,即使在 Windows 中也不需要它。但魔鬼在细节中:
在低层次上,硬盘驱动器只是一堆可以读写的字节。每个字节都有一个数字——第一个字节、第二个字节等等。而且……就是这样。只是一堆编号的字节。请注意,没有“文件”或“目录”或“分区”或其他任何概念。当操作系统想要读取或写入驱动器时,在最低级别它只是对它说“请给我字节 123 到 456”或“请将此数据写入字节 789 到 1234”。或类似的东西。
事实上,您也可以轻松编写这样的程序。如果你是一名程序员,你需要做的就是
\\.\PhysicalDrive0
像普通文件一样打开一个特殊的文件名,你就可以完全访问驱动器上的所有字节,就像它们被写入一样。(注意:这是在 Windows 下。在 Linux 下,您打开其中一个文件/dev
,其他操作系统可能还有其他机制)请注意,您需要管理员权限,因为您确实可以访问驱动器上的所有敏感信息。但除此之外,仅此而已。我自己做过。
现在,实际上,我对你撒了一点谎。一个小小的善意谎言。驱动器实际上并不处理单个字节。它在“扇区”中读取和写入数据。这只是“一次一堆字节”的花哨名称。对于“旋转生锈”类型的驱动器,扇区通常为 512 字节大。因此,当您读取或写入驱动器时,您需要以 512 字节的大块进行。因此,Windows 实际上告诉驱动器“获取扇区 1 到 5”或“写入扇区 6 到 8”。但这并没有真正改变整个想法。
SSD 通常具有较大的扇区,并且驱动器之间的大小可能会有所不同。通常它是 4096 字节,但也有具有 2048 字节扇区的驱动器,并且可能还有其他值。再次 - 并不重要,只是要记住一些事情。操作系统通常会将其抽象出来并允许您读取和写入任何内容,然后做一些额外的工作以确保结果符合您的预期。
下一步是wallyk 在他的回答中很好地解释的“分区表” 。
分区表不是驱动器关心的任何东西——它关心的只是读取和写入字节扇区。但是我们人类希望将驱动器分成“分区”,这就是分区表的用武之地。按照惯例,分区表存储在驱动器的最开始处。它可能也记录在某个标准中,以便所有工具和操作系统对它们都有相同的理解。
自 1982 年以来,MBR(主引导记录)表是一个较旧的标准。由于那时甚至没有人梦想过 SSD 或不同于 512 字节的扇区,因此 MBR 被设计为占用 1 个扇区(512 字节)并且具有一堆其他限制,特别是与更大的驱动器尺寸有关。
最终,驱动器变得足够大,以至于 MBR 还不够,因此引入了 GPT(GUID 分区表)来绕过这些限制。
现在,无论您使用哪种格式,分区表实际上所说的都是“分区 1 存在于扇区 50 到 5000 上并使用 FAT32 文件系统格式化;分区 2 存在于扇区 5001 到 10000 上并已格式化”使用 EXT4 文件系统”等等。
操作系统可以从中找到实际的分区并解析文件系统。这就是您获取文件、文件夹和权限以及操作系统为您提供的其他内容的地方。这一切都在软件中完成。
还有一点需要注意——正如我所说,分区表是一种约定,而不是必需品。硬件不在乎,软件在乎。因此,即使没有驱动器,您也可以使用驱动器。例如,在当今时代,在 Linux 中使用 LVM 来管理您的硬盘驱动器是一种常见的做法(这有点说来话长)。一种可能性是将整个驱动器添加到由 LVM 管理的设备池中。在这种情况下,驱动器上将没有分区表 - LVM 将对其进行管理。
想象一下像儿童磁板一样的 HDD
当你第一次拿到一块板子时,它不会是全白的,而是黑白混杂的胡说八道。在您可以读取或写入某些内容之前,您首先必须擦除您想要写入的部分电路板。而且由于硬盘驱动器可以存储所有类型的数据,您还必须创建一些初始信息(通常在开始时),这些信息定义驱动器上的数据类型。
例如,我可以在左上角写一个点图案来指定要写成英文的板的内容。或另一种模式,这将指示图像。或者是一个复杂的模式,它将电路板分成四个部分,并定义左上角将包含一个图像,右上角将包含英文文本,下半部分的两个是空的,准备好新数据。(而且在模式下写“下半部分为空”就足够了,我不必完全清理这部分,因为没有人会尝试读取这个空间的内容,因为它被指定为“空” )
这样,操作系统通常会在驱动器的开头写入清晰的模式,可用于识别驱动器上写入的其他数据以及可以找到的位置。这些部分是分区表和文件系统描述符。
未知数据不易与噪声区分开来
当操作系统遇到 HDD 时,它通常会尝试读取驱动器上的第一个字节以识别特定模式。大多数操作系统都知道如何对驱动器进行分区的多种不同格式,并且它会尝试找到已知的标记(主引导记录、分区表等)来识别驱动器的内容。- 如果操作系统(如 Windows)找不到它识别的模式,它不知道驱动器是否只是“空”(充满随机噪音,如摇动后的磁板)或者它是否只是在它不知道的格式。
因此,“未分配空间”只是无法识别的数据,操作系统没有可识别的模式。如果您选择在这个空间中创建一个分区,操作系统将简单地覆盖前几个字节并创建一个数据模式,它本质上是说“这个驱动器将包含这个结构中的文件,并且当前这个注释之后的所有内容当前都是空的并且可以被覆盖”,然后您复制到驱动器上的所有文件都将写入本说明中定义的结构中。
“未分配空间”的特殊情况
HDD 上无法识别的空间可能是未知的文件系统。或者它可能是由像 VeraCrypt 这样的加密软件生成的隐藏分区——其设计目的是使隐藏的加密数据看起来就像未分配磁盘上的随机噪声。另一种情况可能是文件系统损坏。如果硬盘驱动器遭受了一些损坏,一开始的模式可能会被破坏,因此系统无法再识别文件系统,即使它是已知类型。在这种情况下,您将需要一些恢复软件,它会尝试重建有关文件系统的信息,以便可以再次访问原始数据。
访问原始数据的工具
还有一些适用于 Windows/Linux 的工具,可让您访问 HDD 的原始数据。这些工具不会关心驱动器是否已分区或仅包含随机噪声,如果您使用这些工具,您可以查看整个驱动器,就像磁板一样。在那里,您会看到大量看似随机的数字和符号,它们通常由操作系统中的文件系统驱动程序解释,以允许您查看文件和文件夹的结构。
如果您对文件系统的工作方式感兴趣,您可以查看具有此类工具的驱动器并亲自查看分区表。