Linux 只有一个目录树,不像 Windows 通过 CDEF 来有很多目录树(不过 Windows 正在像单树靠拢。他的树根是桌面)
也就是说你可以把 Linux 想象成只有一个 C 盘。所有的分区只能放在目录上。(这点使用 Windows 的 NTFS 分区能完全体现,你可以拿 Windows NT/2000/XP/Vista 系列来试试)
你可以把分区挂在*任何*地方。挂载后,他就成为了一个有独立空间的目录。
但因为分区里面的数据独立的原因。你重新安装系统,格式化分区可以借助分区方式来搞定很多郁闷的事情,就像用 Windows 的时候,重要数据千万不要放在 C 盘上一样(桌面也在 C 盘哦)。但如果使用 Linux ,你完全可以借助这个功能,把你的个人数据目录直接指向到一个(好吧,语言顺序的问题来了,这里经常说的就是把目录挂载到分区上,翻过来其实也对啊……)。这样的话,你格式化系统重装后,只要把这个分区保留不格式化,安装的时候设置好挂载回来,安装好进入系统,你的数据自己就跑回来了~因为是安装程序的前置挂载,这里比 Windows 方便的在于不用自己动手,直接完美使用(如果你不闲麻烦,Windows 也可以这么办,但需要 DIY )。
这样就有了很多方便的用法。比如网络服务器,www 目录独立分区,格式化换系统(比如以前拿免费的 ubuntu 抗着,突然发了财,非要爽爽最高级别的 RedHat 高级服务器全套服务),直接格式化 / 分区,www 数据根本不用担心会被同时格掉。
明白了不?
咱们继续说,分区可以挂到目录上,其实目录也可以绑定到目录上(windows 似乎也支持,但不像挂分区那么方便)。命令是 “mount -o bind /xxx/源目录 /xxx/目的目录”。
前提是目的目录的分区文件类型是 linux 的,就像 Windows 要求是 NTFS 一样)
终于,语言顺序用上了,你可以把目录挂载到分区上了,不过到头来还是目录接着又一个目录。
据例子说明目录、分区的概念:
你先把 /dev/sda2 (分区的节点,Linux 的设备基本都是以实体文件的节点方式出现,这里的 sda1 才是他的名字(SCSI 或者 SATA 的第 1 个设备的第 2 个分区,命名方式不予讨论),/dev/ 纯粹是分类保存的目录,你要是现在已经晕了,你就把这个分区想成是一个不在目录中出现的东西,我们临时叫他 “A” 。
A 没出现在目录中,我们要把他挂在到 /mnt/1 上(位置任意,但因为约定俗称的原因,大家习惯把非系统重要的普通数据分区仍这里,但自动挂分区的 hal 软件包,却非要扔到 /media 里)
但仅仅一个 A ,Linux 是不知道是什么的。Linux 因为设备命名的特殊性,他非要有一个实体的类似文件的节点“文件”来体现。根据命名规则 sda2 ,光这一个节点文件还不够,既然当成文件,他需要放在一个目录里,约定俗成到 /dev 了。
结果 “SCSI 或者 SATA 的第 1 个设备的第 2 个分区” 就被实体化为了 /dev/sda2 ……
但要注意节点“文件”不是文件,虽然你可以把他当文件进行一些处理……但至少我是不敢随便处理他……
挂载: mount /dev/sda2 /mnt/A
好了,先在 sda2 终于不是一个没用处的节点“文件”了,他成了 /mnt/A 这个目录。
cd /mnt/A
现在就在 sda2 的分区中。你可以使用了,一个分区成为了这目录树的一部分。这个目录开始,空间就是独立的了。挂载分区就像 Matrox 里面的锁匠,他把一扇门和另外一个空间连接起来了。进入这个门,你就到了另一个数据空间中。
之后我们新建立一个目录:
mkdir B
之后把 /mnt 目录挂载到新的 B 目录上:
mount -o bind /mnt /mnt/A/B
之后
cd B
ls
你看到了 A
cd a
ls
没文件?怎么回事?不是 sda2 分区挂载到这里了么?
没错就是没有,因为你现在是 /mnt/A/B/A 而不是 /mnt/A 现在的 A ,才是源源本本的 /mnt/A 这个目录,/mnt/A 已经被转移到了 sda2 上了。
这个时候我们新建一个空文件
touch 123
之后
ls /mnt/A
你会发现 /mnt/A 下面还是只有一个 B ,这个B 位于 sda2 中。
cd /mnt/A
umount /mnt/A/B
umount /mnt/A
卸载刚才的挂载
ls /mnt/A
你看到了刚裁的 123 文件
linux 也可以把操作系统安装在一个分区啊。
linux 分区方式是很灵活的。你可以只把数据目录挂载到一个独立的分区。具体那些目录是数据分区,可以看 POSIX 的相关目录结构文档(我记得这个标准是 FHS )。这种目录设定,保证了 Linux UNIX FreeBSD 乃至 MAC OS X 的相互兼容性(至少源代码,脚本语言不需要大改)。
Windows 的盘符设计其实就是这种目录设计的变体,只是你没有感觉到而已。
C 是系统,D E F G 什么的是对应的功能目录。
比如: C 对应 Linux 的 /usr 存放软件,D 对应 Linux 的 /home 存放个人数据等。E 对应一个 Linux 的自定义的目录(比如 /data )存放备用数据。
文件系统设定是死的,人是活的。不要针对一个框框去反对另一个框框。每一个设计都有他的用意。
Windows 目前就在向 Linux 这种单一目录树方式靠拢。“我的电脑”的出现,就是第一步。Windows 的下一步就是我的文档。现在 Vista 就向 *nix 一样把个人的数据都放在个人的目录中。XP 其实就已经这样了,但是不如 Vista 这么明显。