研究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了新的分区,会导致之前的看不到,这个优先级的问题我还不清楚。
待我搞懂再来说清楚!
关键词: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了新的分区,会导致之前的看不到,这个优先级的问题我还不清楚。
待我搞懂再来说清楚!
相关文章推荐
- 怎样将一个windows硬盘重新分区,格式化,并挂载到linux系统内
- windows与linux双系统,删除linux分区后,开机进入grub resuce提示符的问题
- 解决Windows下格式化Linux分区后无法进入系统的问题
- UEFI+GPT模式下的Windows系统中分区结构和默认分区大小及硬盘整数分区研究
- 【双硬盘双系统】LinuxC下对EFI格式windows磁盘进行分区-动态生成GPT表
- linux-->结合windows系统分区理解linux系统分区以及挂载点
- 双系统(Linux + Windows)下时间不一致问题解决方法
- Linux和Windows双系统带来的系统时间问题的解决详述
- linux 挂载硬盘并分区最后mount到系统上。
- 解决在windows系统中删除ubuntu系统分区导致重启后提示grub rescue,不能进入windows系统的问题。
- Windows 到 Linux 之旅: 第 6 部分. 使用分区和文件系统
- Linux系统下如何挂载Windows分区和U盘
- windows 2003 server系统硬盘分区调整技巧
- Windows与Linux系统硬盘组织方式简介
- Windows与Linux系统比较 相似与不同
- 在Linux系统的VPS上对硬盘进行分区、格式化和挂载的方法
- windows+linux16.04双系统时间不一致的问题
- 关于“在efi系统上,windows只能安装到gpt分区”的问题的解决方法的讨论(典型的宏基4750g)
- svn_auth系统由windows迁移到linux下遇到的问题
- 如何解决双系统中Linux访问不了windows的NTFS分区的问题