这是我对 Linux 分区和挂载概念的理解,大家看看对不对

我画了个思维导图,描述我对 Linux 分区相关概念的理解,朋友们帮我看看我理解得对不对。



图中的分区方法可能不够好。

1赞

我想都对吧。
唉,我一直没搞懂主分区、扩展分区、逻辑分区都是啥(只知道主分区最多能有 4 个这回事)。自从用了 Linux 后更不需要懂了(我只单奔,从不双系统),只知道 sda1,sda2…

1赞

我用文字描述一下我的理解:

分区:
sda、sdb、sdc 等代表物理磁盘,是实实在在存在的,比如电脑上装了两个硬盘,插了一个 U 盘,那他们很可能分别是 sda、sdb、sdc。
sda1、sda2、sda3、sda4、sda5、sda6、sda7…… 这些表示的都是「分区」。
sda1、sda2、sda3、sda4 表示「主分区」或「扩展分区」,扩展分区最多只能有一个,可以没有。主分区和扩展分区加起来不超过 4 个。
「扩展分区」与「逻辑分区」之间是包含与被包含的关系,扩展分区中可以包含多个逻辑分区(具体能有多少个我就不清楚了)。
sda1~4 表示的是主分区或扩展分区,sda5~n 表示的是逻辑分区。常常,我们会划分一个主分区和一个扩展分区,然后在扩展分区里再分多个逻辑分区。所以会出现 sda1 sda2 sda5 sda6 … 的情况,即没有 sda3 和 sda4。因为 sda3 和 sda4 表示的是主分区或扩展分区,即使没有这么多主分区,逻辑分区也是从 sda5 开始的。

挂载:
Linux 的目录是树状的,目录名都从 / 开始。
一个分区挂载到一个目录中后,操作该目录时,实际上就是在操作该分区。
比如,sda1 挂载到 /,sda6 挂载到 /home,若此时并没有某一分区挂载到 /opt,则发生在 /opt 目录下的读写操作,实际上是读写 sda1。但如果是发生在 /home 目录下的读写操作,则实际上是读写 sda6。

在 MBR 分区表的情况下逻辑分区在不同接口硬盘上有不同的上限,IDE 的最多可创建 63 个,SCSI、SATA、SAS、USB 的能最多能创建 15 个。

1赞
  1. MBR 分区表下,主分区最多可以有 4 个。扩展分区可以有很多。

参考阅读:[ 已解决 ] 安装后,重启出现 grub rescue>

  1. 你这个分区方案经过装机实验吗?感觉应该开不了机。

引导过程是:BIOS -> MBR/GPT -> GRUB -> initrd -> kernel -> / partition

  • initrd 就是一个带 linuxrc 的能在内存里跑的最小化 Linux,它没内核,干的唯一一件事就是在分区里找到内核并加载它。initrd 可识别逻辑分区。

引导用的 initrd 和 kernel 都放在 sda5 的 /boot,而 sda5 是逻辑分区,GRUB2 认不出。

逻辑分区需要加载上 initrd 或 kernel 才能够识别,但现在你加载不上。

即使 fallback 到了 / 分区,你的 / 分区 sda1 里并没有 initrd 和 kernel,它们在 sda5 里。sda1 里任何能够用于引导的东西都没有。

不要以为 / 挂上了所有它之下的文件结构就是自动可用的,那种文件结构是给内核用的,挂不上内核该结构根本不存在。挂载内核前全是 GRUB 在管,它可不认识 Linux 分区结构,它就是在分区中找 initrd 或 kernel。引导是有严格的先后顺序的。

boot 应该放到主分区,最好放在磁盘的开头。
传说中最佳的分区方案应该是把 /boot 放在磁盘开头,swap 放在磁盘结尾,/ 放在 boot 后边。
然后是逻辑分区 /home 等

@gmg137

该理解有误。

硬盘是碟型的,磁头默认位置在最里面。也就是说越靠里,读取速度越快。

所以 swap, /tmp, /var/tmp,/boot 这些需要频繁读取的小文件动态文件分区都应该靠里,/ 和 /home 可以靠外。

「靠里」在分区的时候就是给它一个较小的编号。

是不是 /boot 必须位于 sda1-sda4 上,其他的可以无所谓?

是 initrd/kernel 必须位于 /boot 所在的分区里,它们安装位置就在 /boot。而 /boot 可以位于单独分区,也可以和 / 一起在一个分区。/boot 所在的分区必须是主分区(如果没单独分,那 / 所在的分区也就必须是主分区),因为只有主分区才能被 GRUB 识别,从而不破坏整个引导链。

PS:跟分区编号没关系。分区编号只能决定它们距离硬盘磁碟最内侧的排名。你要是 SSD 的话,你扩展分区可以是 sda1, 然后主分区是 sda(逻辑分区的最后一个 + 1) - sda(逻辑分区的最后一个 +4)。

eg:

- sda
-- sda 1 {
--- sda 2
--- sda 3
--- sda 4 }
-- sda 5
-- sda 6
-- sda 7
-- sda 8

或者扩展分区夹在中间之类的都可以。

也就是说,包含着 initrd/kernel 的 /boot 所在的那个分区是主分区,就 OK 了呗?

@marguerite
这个分区方案可以成功开机(VirtualBox 测试),分区方案图片可以表示出来。


这张图表示了引导方式,是在我用了上述的分区方案后,openSUSE 安装程序自动选择的。 ** 在我的印象中 ** ,如果把「从扩展分区引导」改成「从引导分区引导」(此时引导分区是 sd5),则会导致引导失败。

/boot 放开头基本上可以说是 惯例了,sw ap 要放前面我也第一次听说,学习了。以前也听说 swap 一般放在后面,给的原因是看上去分区完整一点。。。。

当初学的时候是说 Linux 是可以装在逻辑分区的。。。windows 和 FreeBSD 必须装主分区。。。

我倒觉得不必在意 (当然你学习是可以),Linux 本身磁盘管理各方面就比较强,你个人桌面用用分的不合理也没啥使用感觉上的区别。

所谓安全问题,Linux 也没那么容易坏,谁遇到过日志损坏结果因为没分区整个系统坏了的? 反正我只是书里看到过。

特别你用强大稳定的 openSUSE,就更不用担心啦。两个分区也是可以了啦。 :sunglasses:

之前也像 lz 这种分区成功装过的,前面的是 win,/sda5/sda6/sda7 分别是 /,/home,swap,grub 是安装在 /dev/sda。
感觉 swap 就个人而言没有太大的必要在前面吧,个人日常使用时,基本 4g 内存就足够了,swap 没怎么用。

逻辑分区不可被引导么?我实际使用好像是不存在的哦

这儿似乎有一点点错误, / 分区可以不是主分区,这个我实践过的,只有 Windows 才要求系统分区必须是主分区 ; 因为 grub 是安装在整个硬盘而不是某个具体的分区上的(硬盘的第一个分区一般是从 2048 扇区开始,除第一个扇区是 MBR 外,grub 安装在这儿),通过 grub shell 手动引导也是可以找到逻辑分区上的 / 分区。
还有,在 MBR 分区表下,分区编号那儿,扩展分区可以夹在中间,但是 主分区 / 扩展分区 可能的命名号仍然是 sda1~sda4,就算你 sda1 给分配成扩展分区,sda1 里面的扩展分区(改:逻辑分区)也要从 sda5 开始。这只是命名的问题,无伤大雅!

ps:什么时候出现最多只能嵌套一层引用的规则的??编辑以前的帖子被提示这条信息。。

好复杂啊,把理论都搞复杂了

女王, 新人表示不服. 觉得应该把 swap 放到最后面, 因为现在 Linux 一般 2G 内存都用不完. 交换分区使用率常年为 0.

mark 一个

事实上,硬盘其实也是文件!

我目前似乎是这样的:

SSD:

  • 主分区 1:Win7 系统
  • 主分区 2:/

SATA:

  • 主分区 1: Win7 系统文件
  • 主分区 2: Win7 文件资料
  • 主分区 3: Win7 多媒体资料
  • 扩展分区
    • 逻辑分区 1: Win7 软件
    • 逻辑分区 2: swap
    • 逻辑分区 3: /home