您的位置:首页 > 运维架构 > Linux

研究Linux系统硬盘分区,并与Windows比较(未完,优先级问题没弄明白)

2012-07-23 00:00 477 查看
研究Linux系统硬盘分区,并与Windows比较

关键词:Linux、硬盘分区

Windows的文件结构:

多个并列的树状结构,root为“C:\”、“D:\”、“E:\”等等(通常叫做C盘、D盘、E盘)。Windows的分隔符是“\”(反斜杠)。

Linux的文件结构:

单个树状结构,root为“/”。Linux的分隔符是“/”(斜杠),值得注意的是URL的分隔符也是“/”,例如楼主的空间的URL为:“http://hi.baidu.com/home”。Linux的根目录下通常存在以下几个目录:/bin、/boot、/dev、/etc、/home、/lib、/media、/mnt、/opt、/proc、/root、/sbin、/tmp、/usr和/var等。稍后具体介绍每一个目录的作用和意义。

Linux的下硬盘以及分区命名规则:

“/”+“设备类型(sd或者hd)”+“硬盘号(第一块为a,第二块为b,依此类推)”+“某块硬盘的分区(第一分区为1,第二分区为2,依此类推,但是不超过16)”

例如:

“/dev/hda1”代表IDE类型的硬盘,它此时是第一块硬盘,并且该目录指代的是它的第一个分区。

“/dev/sdb3”代表SCSI类型的硬盘,它此时是第二块硬盘,并且该目录指代的是它的第三个分区。

下面引用http://doc.linuxpk.com/39733.html 一段话:

{在Linux中的设备管理中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux 把各种 IDE 设备分配了一个由 hd 前缀组成的文件;而对于各种 SCSI 设备,则分配了一个由 sd 前缀组成的文件。例如,第一个 IDE 设备,Linux 就定义为 hda;第二个 IDE 设备就定义为 hdb;下面以此类推。而 SCSI 设备就应该是 sda、sdb、sdc 等。}

一个硬盘最多能同时有16个分区,并且“主分区”+“扩展分区”=4。

一个硬盘可以是下面这样被划分:

硬盘-->主分区1(hda1)

-->主分区2(hda2)

-->主分区3(hda3)

-->扩展分区1(hda4)-->逻辑分区1(hda5)

-->逻辑分区2(hda6)

-->...

-->逻辑分区x(hdax,x<=16)

当我们把一个硬盘用某种工具分区完毕后,这些分区信息会被保存在硬盘的分区表里面。一旦这块硬盘被一个Linux系统识别,系统会读取这些分区信息,然后在/dev下根据分区表创建相应的目录。此时我们还是不能使用(即读写硬盘里面的文件)该硬盘,我们看到的这些还只是设备文件节点,还需要挂载(mount)操作。

假设你的Linux系统当前是这样:

[root
@localhost ~]# df -h

Filesystem Size Used Avail Use% Mounted on

rootfs 50G 5.3G 43G 12% /

devtmpfs 494M 0 494M 0% /dev

tmpfs 502M 224K 502M 1% /dev/shm

/dev/mapper/VolGroup-lv_root 50G 5.3G 43G 12% /

tmpfs 502M 42M 461M 9% /run

tmpfs 502M 0 502M 0% /sys/fs/cgroup

tmpfs 502M 0 502M 0% /media

/dev/mapper/VolGroup-lv_home 48G 3.9G 42G 9% /home

/dev/sda2 497M 95M 378M 21% /boot

[root
@localhost ~]#

从上面可以看出,/dev/sda2分区,也就是sda硬盘的第二个分区被挂载到了/boot目录,此时可以尝试进入/boot并且查看一下/boot下的情况:

[root
@localhost boot]# cd /boot && ls

config-3.3.4-3.fc16.i686.PAE initrd-plymouth.img

config-3.3.5-2.fc16.i686.PAE lost+found

config-3.3.7-1.fc16.i686.PAE System.map-3.3.4-3.fc16.i686.PAE

grub System.map-3.3.5-2.fc16.i686.PAE

grub2 System.map-3.3.7-1.fc16.i686.PAE

initramfs-3.3.4-3.fc16.i686.PAE.img vmlinuz-3.3.4-3.fc16.i686.PAE

initramfs-3.3.5-2.fc16.i686.PAE.img vmlinuz-3.3.5-2.fc16.i686.PAE

initramfs-3.3.7-1.fc16.i686.PAE.img vmlinuz-3.3.7-1.fc16.i686.PAE

[root
@localhost boot]#

从上面可以看出,/boot下是有些东西的,此时我们umount sda2,再查看一下挂载情况:

[root
@localhost ~]# umount -v /boot

/dev/sda2 has been unmounted

[root
@localhost ~]#

[root
@localhost ~]# df -h

Filesystem Size Used Avail Use% Mounted on

rootfs 50G 5.3G 43G 12% /

devtmpfs 494M 0 494M 0% /dev

tmpfs 502M 224K 502M 1% /dev/shm

/dev/mapper/VolGroup-lv_root 50G 5.3G 43G 12% /

tmpfs 502M 42M 461M 9% /run

tmpfs 502M 0 502M 0% /sys/fs/cgroup

tmpfs 502M 0 502M 0% /media

/dev/mapper/VolGroup-lv_home 48G 3.9G 42G 9% /home

[root
@localhost ~]#

从上面可以看出,/dev/sda2已经被取消挂载了。

疑问一:那此时/boot目录还在吗?

答案一:/boot目录还在。

疑问二:那此时以/boot目录为根节点的子叶节点还在吗?不在的话去哪了?

答案二:可以说在,也可以说不在,基于不同视角。

原因一:说它们不存在,因为此刻进入可以尝试:ls /boot,会发现/boot什么也没有,所以可以说不存在了;

原因二:说它们存在,因为它们在客观上的确存在。

它们在哪呢?

我们之前说了sda2是硬盘sda的第二个分区,所以/boot下的一切子叶都依然保存在sda2里面,但是由于未挂载,以至于对于用户来说,它们不存在了。

如何验证楼主这个说法?

现在我们试图把sda2挂载到非/boot目录下,以验证上述说法:

[root
@localhost ~]# mount /dev/sda2 /mnt/new && ls /mnt/new

config-3.3.4-3.fc16.i686.PAE initrd-plymouth.img

config-3.3.5-2.fc16.i686.PAE lost+found

config-3.3.7-1.fc16.i686.PAE System.map-3.3.4-3.fc16.i686.PAE

grub System.map-3.3.5-2.fc16.i686.PAE

grub2 System.map-3.3.7-1.fc16.i686.PAE

initramfs-3.3.4-3.fc16.i686.PAE.img vmlinuz-3.3.4-3.fc16.i686.PAE

initramfs-3.3.5-2.fc16.i686.PAE.img vmlinuz-3.3.5-2.fc16.i686.PAE

initramfs-3.3.7-1.fc16.i686.PAE.img vmlinuz-3.3.7-1.fc16.i686.PAE

[root
@localhost ~]#

比较一下,/mnt/new下的内容和之前/boot下的内容一模一样。

此刻又有疑问了,那现在/boot下怎么样了?

[root
@localhost ~]# ls /boot

[root
@localhost ~]#

从上面可以看出/boot下还是空的。

最终我们可以得到这样的结论,不管该分区挂载到哪个目录(这里可以称为挂载点)下,分区里的内容都不会变。

但是此时又有一种特殊情况出现了,下面请看

假设此时/dev/sda2被挂载到/mnt/new下,并且/dev/sda2分区里面有个test.txt,文件内容是2222,/mnt/new下也有个名叫test.txt的文件,但是文件内容是1111。

此刻我们做个这样的操作,把/dev/sda2从/mnt/new卸下来,然后再挂载到/boot目录,毫无疑问/boot下会因为有两个同名test.txt文件,但文件内容不同,那我们查看/boot目录会怎么样呢?一个or两个test.txt?那么test.txt的文件内容会怎么样呢?

[root
@localhost /]# ls

config-3.3.4-3.fc16.i686.PAE lost+found

config-3.3.5-2.fc16.i686.PAE System.map-3.3.4-3.fc16.i686.PAE

config-3.3.7-1.fc16.i686.PAE System.map-3.3.5-2.fc16.i686.PAE

grub System.map-3.3.7-1.fc16.i686.PAE

grub2 test_d

initramfs-3.3.4-3.fc16.i686.PAE.img test.txt

initramfs-3.3.5-2.fc16.i686.PAE.img vmlinuz-3.3.4-3.fc16.i686.PAE

initramfs-3.3.7-1.fc16.i686.PAE.img vmlinuz-3.3.5-2.fc16.i686.PAE

initrd-plymouth.img vmlinuz-3.3.7-1.fc16.i686.PAE

[root
@localhost /]#

[root
@localhost /]# cat /boot/test.txt

2222

[root
@localhost boot]#

看到这里,大家有疑问了,那个内容为1111的test.txt哪去了?

首先把文件内容为1111的test.txt成为A,2222的test.txt称为B

A创建在/boot目录下,而boot本身是属于/的,而/肯定也是某一个分区的挂载点,一般是/dev/sda1,从上面的df -h可以看出/是/dev/mapper/VolGroup-lv_root的挂载点。所以A依然存在,存储于/dev/mapper/VolGroup-lv_root的boot目录下,当/dev/sda2被挂载到boot以后,A只是此时不可见了,但是依然存在,所以我们cat的时候发现只能此时可见的只有B,而看不见A。不妨这样再操作一下,umount /boot,此时再cat /boot下的test.txt,结果显而易见,又是1111了。

至于为什么mount了新的分区,会导致之前的看不到,这个优先级的问题我还不清楚。

待我搞懂再来说清楚!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: