@ 2013.10.13 , 21:19
78

为什么苹果电脑硬盘不分区?

本文翻译自程序员的问答社区 stackexchange.com 上的一个问题。

[-]

有人可以给我解释一下,为什么 Linux 的文件系统是「单目录层阶树状」结构,而不像 Windows 那样有个 C:\ D:\ 分区啥的,这样做有没有特别的原因呢?

(小编注:苹果 Mac OS 和 Linux 都是 Unix 的分支,所以题目我就…… ╮(╯▽╰)╭ )

一句话:不分区的好,Windows 那是为了向下兼容

Doug O'Neal 163票

说起来 Unix 的文件系统的道行要比 Windows 的早很多年,所以您的问题得改成:「为什么 Windows 要自搞一套弄出个硬盘分区符号来呢?」

树状的文件结构有个优势就是任何子目录或者文件,都能顺着根目录找到。所以,如果你需要把本地文件迁移到一个网络硬盘上,这时候对于软件来说,它们不会察觉到任何区别。

假设你有一套系统,操作系统焊死不能动,但是有个程序有很高的I/O需求,那么你可以很方便地把 /usr 目录加载为只读,然后吧 /opt(应用程序安装目录)目录加载到一块SSD上。这样整个文件系统的结构对于操作系统来说没有发生任何改变。然而在Windows下,这种问题就比较讨厌,特别是程序路径前面带着个 C:\Program Files\ 的时候……

Gilles 70票

这都是有历史原因在里面的,部分上是因为这样做在当时更有效。

Multics

Multics 是我所知的历史上第一个采用「层阶树状文件结构」的操作系统,一个目录里还嵌着子目录这种机制。引用 R.C. Daley 和 P.G. Neumann 的《通用辅助文件存储(A General-Purpose File System For Secondary Storage)》一文中的话:

论文第二部分阐述了一种「层阶树状文件结构」的文件系统,对于操作系统来说,它非常高效。这种结构兼顾了可靠性和灵活性……

为了便于理解,我们可以把这种结构想象成一棵树,文件的树,其中有一些目录其实也是文件。但是有一个例外的目录,它自身的指针只指向一个单一的,确定的目录,那就Root目录。它没有明确地被其他目录所指,root目录只是隐式地代表一个虚拟的分支,我们称这个分支结构为「文件系统」。

在任何时候,用户都处于一个目录下面,我们称它为「工作目录(working directory)」,用户可以通过指定入口访问工作目录下面的文件。而且多个用户可以同时工作在同一个工作目录之下。
在其他各个方面,Multics 追求的是灵活性,用户只需工作在整个文件系统的一条分支上,其他的不用管,但还能保证用目录管理文件的便捷性。目录还被用来控制访问权限 —— 目录的 READ 属性允许用户访问目录中的文件,而 EXECUTE 属性允许用户修改目录中的文件 (这个特性被后来的unix系统继承下来)。

Multics 还遵循了「单一存储对象池」的设计原则。但是论文没有在这方面展开。「单一存储对象池」对于当时的硬件条件来说非常合适,那时候没有可移动的硬盘,起码是没有人关心这个问题。Multics 确实有一个备用的备份存储池,但对于用户来说,它是不存在的。

Unix

Unix 系统深受 Multics 的影响,但是比起 Multics 的「灵活」,Unix 更专注于加强系统的「简洁」。

「单一目录树层级」的文件系统就很适合Unix系统。就和 Multics 一样,存储池的细节,经常不需要用户关心。但是后来出现了可拆卸的硬盘, Unix 通过 mount 和 umount 两个命令把对存储设备的操作暴露给用户(只有「管理员权限」的用户才能执行这样的操作)。在 《Unix 分时系统设计(The Unix Time-Sharing System)》一文中, Dennis Ritchie 和 Ken Tompson 解释道:

虽然系统根目录一般都在同一个存储设备上,但是对于其他分支目录则未必要这样做。出于两种考虑,我们需要 mount命令完成存储设备挂载的工作:普通文件的文件名一致性,和文件所在的存储设备可能有其独立的文件存储结构。通过mount命令,可以把之前的一个文件,替换成一个可移动存储设备上的完整的目录结构,事实上,mount命令把文件层级的某一部分,通过引用外部数据,替换成一个新的结构。这样对于之前整个文件系统来说,没有发生任何改变。其实,拿我们的系统安装过程举例,root目录一直在我们的硬盘上占了一小块地方,但其他用户数据在不同的硬盘上,通过mount机制,按序列加载组成一个初始化的系统。一个「可挂载」的系统,完全是通过读写特殊文件完成的。各种应用可以创建自己的文件系统,或者简单地从他处拷贝一份。
(小编注:上面这段文字的中心思想:在UNIX中,一切都是文件。)

「层阶树状文件系统」还有一个优势,就是可以把管理存储设备的复杂任务交给内核处理,这就意味着内核虽然越来越复杂,但是对于建立其上的应用来说,其结果就是保持简洁。因为内核已经把脏活累活都包了,大部分应用都不用关心这部分细节,这是一种更加自然的设计。

Windows

Windows 系统流淌着两支古老血脉:设计运行在 VAX 微机上的 VMS 操作系统,和早期Intel微机(如 8080、Z80)上运行的 CP/M 操作系统。

VMS 有一个分布式的层级文件系统,叫做 Files-11
。在 Files-11 中,一个文件的完整路径包括一个「节点名称」、一个关联的用户账户、设备名称、目录树、文件名和文件类型,以及版本号。VMS 有强大的Logical Names功能,这个功能允许自定义「快捷方式」到指定的路径,所以用户不需要在意目录的「真实」路径。

CP/M 是为了 64kB 的内存和软盘系统设计的,为了一切从简,所以从诞生起,它就没有「目录」这个概念,但是文件是通过引用「驱动器位置」来访问的,比如 A: 或者 B:

而 MS DOS 1.0 继承了 CP/M 的这个特性,所以,当 MS DOS 2.0 引入「目录」的概念以后,为了兼容 1.0 也在路径钱保留了「盘符」字符,而斜杠「/」符号是原来 VMS 和 CP/M 系统中表示「命令参数开始」的符号,所以后来的 DOS 以及 Windows 必须区分,而采用了 反斜杠「\」 符号作为路径分隔符。

Windows 继承了 DOS 和 VMS 的习惯,虽然已经意义不大,但是依旧保留着「盘符」的传统。如今,在 Windows 底层,采用的是 UNC 路径(通用命名规则,即 \servername\sharename 的规范),但这只是一些高级 Windows 用户需要知道的功能,Windows 现在确实可以通过「重解析点」(Reparse Points)来挂在存储设备。(所以不需要C:这样的盘符了)

本文译自 stackexchange,由译者 Junius 基于创作共用协议(BY-NC)发布。


给这篇稿打赏,让译者更有动力
支付宝打赏 [x]
您的大名: 打赏金额:

2.4
赞一个 (17)

TOTAL COMMENTS: 78+1

[2] 1 »
  1. 3188467

    “Mac下文件和文件夹的移动完全是秒级的,这么说的原因是如果你要在Win下把大量数据进行跨区移动,过程是个生不如死的感受。”
    ————windows在同一盘里移动文件也是秒级的啊,因为那只是路径变了,文件的实际磁盘地址还在原地,就像重庆人以前是四川人,不用搬家就变成非四川人了。夏威夷人没有乾坤大挪移就变成美国人了。

  2. 3188455

    windows你也可以不分区,就一个c盘,没有其它了,然后系统和数据都放在一个盘里啊

  3. 2227588

    话说,手机强迫你有两个分区, sdcard sdcard2

  4. 清漠月下
    @4 years ago
    2220944

    所以说分不分区什么的只是在于用户习惯吧,反正分区和树状结构用起来都是那回事,大家都在往更人性化的方向去靠吧

  5. Aquamarine
    @4 years ago
    2219794

    对于Windows的部分大致是看懂了,希望能够展开下普及。

  6. 2219447

    @neo: 从你的例子中看出你告诉了一个知道点windows目录结构而对unix无知的人。

  7. 2219332

    MAC的时间胶囊太好用了,电脑丢了也不怕。。。。这点很人性化。

  8. 俗人
    @4 years ago
    2219193

    早期DOS使用FAT格式,最大支持到2G磁盘空间,为了能使用更大的硬盘,创造出来的分区,每个区2G,字母排一排,解决了当时的问题

  9. 2218774

    windows 用mklink 也可以很灵活的

  10. 分享之源
    @4 years ago
    2218683

    MacOSX & Unix & Linux 系也有分区的概念好吧,不然为什么会有挂载分区的概念??

  11. 藍冰
    @4 years ago
    2218579

    工作用win7,家用Linux,Linux下的文件管理更为简洁方便,而win下我会乱放,经常会忘记存放路径。
    另外Linux的好处是除了用户的文件夹,其它系统文件夹没root权限是无法去更改的。

  12. 鸡蛋
    @4 years ago
    2218477

    因为标题比较火爆好像转载很多呀,我怎么觉得这篇影响有点不好的呢?
    嗯,从正文到评论感觉奇怪的地方略多……也许只是谁偶尔说错了一点点,但是积累起来就越来越跑题了,严重怀疑误解反而加深了。

    本质就是*nix和M$的不同设计选择沿袭到今天的结果。要比较起来是很复杂的。对用户来说也是各有好处。

    展开太辛苦,只想说一句:其实你在新硬盘上新装一个windows系统,安装程序不会默认给你分D盘E盘什么的,但是为什么一般大家还是会对硬盘分区呢?

  13. 2218447

    表示从正文到评论我都没看懂。。。

  14. wizard
    @4 years ago
    2218390

    我只想问一句:
    你们都看完了么

  15. packaged
    @4 years ago
    2218385

    SSD要分区吗?

  16. laciechang
    @4 years ago
    2218350

    这么快就有。。。了
    digi.163.com/13/1014/07/9B4M7LDM00162OUT.html

  17. CrazyPaladin
    @4 years ago
    2218319

    喂喂喂!所以说这跟苹果电脑有什么关系啊喂!!!

  18. 2218308

    @百得: Symantec表示躺枪了。。。 按照你的说法,数据备份产品基本上都中箭了。另外,绝大多数人用的ghost才是货真价实的盗版,好不好。

  19. 2218302

    @maviskwok: 一个移动的是目录索引,一个移动的数据。你在Mac下面,如果将数据移动到另外的物理位置,一样牛车,不信你自己挂个额外的硬盘到某个节点,进行数据移动试试看看。

  20. 大[哔--]
    @4 years ago
    2218284

    MAC的文件管理方式有一点很不爽,就是界面里自动把文件按分类排好,其实我更喜欢直接平铺全部不加区分地列出来

  21. virchow
    @4 years ago
    2218271

    @gtese:
    同意
    微软也是充分的注意到了赛门铁克的这个做法,所以才加强了系统镜像的功能。
    实际上win内镜像就是体积稍大了点。但是做过的话你会发现,这货真真的就是“镜像”。
    win7目前只要是不进行“奇怪的”操作已经可以堪称不死了。起码我一个OEM的64位win7已经2年没有重装过了。中间恢复过三次,大约是因为升级主板驱动照成的电压问题蓝屏,windbg也显示不了具体信息。
    至于病毒,我真心不知道为什么会染病毒,我已经裸奔了将近2年,就感染过一次“间谍程序”,而且还是windows defender发现的。。。。
    接触linux完全是因为手机,无论是android还是ios都是衍生,这一点从root以后和越狱以后的手机就能看出来。。。
    就我而言,windows已经是大多数人理解系统结构的启蒙系统了。所以纠结于分区不分区,哪一个好已经没有意义了。

  22. 肉壳
    @4 years ago
    2218244

    发现个头像跟我很像的

  23. 2218234

    @百得:

    Ghost 是工具? 不是盗版工具!
    一键Ghost是工具升级版,不是盗版工具。

    Ghost是谁出的? Symantec !

    Ghost也好, Windows还原点也好,都是对系统做个镜像, 怎么到你嘴里就那么不堪?

    [18] XX [1] 回复 [0]
  24. 朱哲
    @4 years ago
    2218176

    好像是说windows早期的文件系统不支持比较大的尺寸,所以不得不分区。

  25. 2218171

    @野龙: 真的假的?有时间试试。

  26. steamwood
    @4 years ago
    2218155

    @Junius_Lou: 虽然没碰过UNIX但是经常玩android系统,我发现重做系统是比Windows更方便……但是软件随便获取权限这事得有人管管了……以某珠宝商为首的各类国产流氓软件太让人闹心了……更闹心的是你还不得不用它们……

  27. shadowlin
    @4 years ago
    2218120

    linux还有mac os也是有分区的。。。只不过分区的表现形式不同而已。linux和unix下面分区作为块设备挂载在文件夹(挂载点下)而已。。

  28. 翼若云
    @4 years ago
    2218073

    分不分都一样,我女朋友电脑所用东西都装在C盘……

[2] 1 »

发表评论


24H最赞