[求助]linux的目录与分区---非常迷惑!!!

[求助]linux的目录与分区---非常迷惑!!!

这几天一直在学习怎么样来安装LINUX。学到了一些东西,但想不通的问题也不少。现在就想问问论坛的高手。

LINUX的分区是通过建立“挂载点”我想也就是通过建立一个目录,进而建立一个分区。如果我这么认为是对的--的话,那我的问题就来了

问题一
我是否可以将目录挂载到“逻辑分区上”?像什么/boot,/home 之类的 ?(当然根目录要排除在外)。

问题二
主分区(根目录除外)上挂载目录是必须要挂载系统目录树内的 一级子目录?并且是只能挂载一级子目录?例如像 /boot 等等
逻辑分区上挂载目录只能挂载,系统目录树内的二级子目录?像 /usr/log 等等 ?如果不是!那主分区上要挂载什么样子的目录,给标准
逻辑分区上要挂载什么样的目录 也给标准。

LINUX的安装就难在 分区和 目录之间的 关系。没有 DOS WINDOWS 所谓的 D E F 盘。只有 一个 一个 的文件夹。所以 我想 弄清 分区和目录之间关系是 很重要的 至少对我来说 很重要 。可我看很多资料 ,对待这个问题  都是一带而过。我不知道是不是我 太弱智 但是我很想弄明白。
真希望那些写教程的师傅们可以写的详细些!写点实际的!连安装都不讲明白哪还叫学生学什么啊!目录的 学习在学习LINUX系统 的 过程中我认为是很重要的,至少我这么认为!!!
希望论坛的 高手 前辈们能给我指点一二!谢谢啊!!!!!!!!!!!!!!!

1.只能说将分区挂载到文件夹上,而不能说将文件夹挂载到分区上。
2.任何分区都可以挂载在任何文件夹上。

分区是一个客观的存在, 将分区挂载到一个文件夹,就能在该文件夹里面查看这个分区所包含的内容。
这个过程没有创建分区,只是将一个分区的内容映射到一个文件夹里面。
请注意语序~目录是不能随便挂载到任意分区上的,因为在没有挂载分区的时候你是不能访问他的……
如果分区被挂载了,那他就成了目录了……
通常所说的目录挂载到分区上,其实就是分区挂载在目录上。但有的时候语言顺序害死人啊……
把目录想象成树,树干,上面的枝桠,直到叶子……
想明白后咱们继续。

Linux 只有一个目录树,不像 Windows 通过 CDEF 来有很多目录树(不过 Windows 正在像单树靠拢。他的树根是桌面)
也就是说你可以把 Linux 想象成只有一个 C  盘。所有的分区只能放在目录上。(这点使用 Windows 的 NTFS  分区能完全体现,你可以拿 Windows NT/2000/XP/Vista 系列来试试)
你可以把分区挂在*任何*地方。挂载后,他就成为了一个有独立空间的目录。

但要注意,因为 / 的关系,以及一些约定俗称的目录结构(已经成为事实标准了……),你要保证系统在*需要的*时候都要能找到系统需要的文件。比如 /sbin 。里面有些程序在系统启动的时候是需要的,但是如果你把他挂载在一个分区中,在系统开使的时候,除了/分区是内核启动挂载外(其实内核挂载 / 之前,还有一个内核自带的 / 来放置没有挂载 / 时需要的文件,但这个不在讨论范围),别的分区都没有挂载。这个时候,你必须把系统启动需要的程序复制到 / 的 /sbin 目录中。同时也要保证之后挂载到 /sbin 分区中也要有挂载后需要的程序(挂在分区会把这个目录重定向到分区上,这个时候原先目录中的文件会无法读取,因为他的目录被替换掉了)

其实 / 分区也是可以重新挂载的,这个挂载因为 / 一直在使用,所以普通手法不能重挂载。
挂载没有任何必须的标准,只要遵守上面的系统要求就行了。

但因为分区里面的数据独立的原因。你重新安装系统,格式化分区可以借助分区方式来搞定很多郁闷的事情,就像用 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 文件

这么明白挂载的意思了么?
挂载是一个连接两个位置的钥匙。他把一个目录目标转移到了另一个分区(目录)上,就像 Matrox 里的锁匠,把他原先进入另一间屋子的门,转移到了另一个空间中。但原先的目录还是存在的,只是被转移到的目标分区的目录所覆盖了。
但因为挂载是基于目录结构的,循环挂载而导致的目录无限循环是不存在的。
但是要注意,Linux 是不能处理断开的目录的,所以在一个没有挂载的分区上挂载目录是不可能的,因为这个未挂载的分区不能被目录树所体现。一个被挂载的分区,就会成为目录树的一部分。这个分区就是一个树杈了,在他的目录里面挂载,和在别的地方一样的。



Linux 的连接也可以实现转移,但就是另外一个概念了,他是一个原先不存在的“文件”,除了不支持挂载没有在目录中出现的分区外,他还可以导致一个循环的目录结构。这个请搜索相关文章吧~
谢谢斑竹!我明白了许多。我还有个问题。那就是 要把分区挂载到目录上。那这个目录,必须是 系统目录树 内部原有的目录。如果我自己 把分区挂载到一个系统目录树内没有的目录(我自己随意建立的) “/mnt/xxxx”  是错的吧???我曾经在网上见到过 一个人在逻辑分区上 建立了一个这样的挂载点“/mnt/linux”???费解??
  看完了 斑竹的文章 还有“沙发”上那位兄弟说的。我想 “分区”对于 linux来说 就是一个 外设 。给谁用就 挂到谁那里 这样理解 对么?还有一个 问题 就 是 :如果一个 分区在系统安装时 ,没有设置挂载,那这个分区在系统安装好之后。也是无法通过mount命令 挂载使用的       是这样么?

[ 本帖最后由 z2312 于 2008-1-22 00:09 编辑 ]
你怎么知道他到linux上没有/mnt/linux这个目录?linux并不是只能建立默认的那几个目录,我完全可以新建一个/linuxfans目录,专门用来存放资料,这就好像你可以在windows的桌面上随便新建目录一样。像我,一般临时挂载系统的话是懒得在/mnt下新建目录,直接挂到/mnt或者是/tmp,反正卸载后/mnt和/tmp下的文件又会回来的(挂在到/tmp慎用,应用程序可能出错)。
谢谢,常来看看
引用:
原帖由 z2312 于 2008-1-21 10:14 PM 发表
谢谢斑竹!我明白了许多。我还有个问题。那就是 要把分区挂载到目录上。那这个目录,必须是 系统目录树 内部原有的目录。如果我自己 把分区挂载到一个系统目录树内没有的目录(我自己随意建立的) “/mnt/xxxx” ...
你可以在任何目录挂载任何分区,这个没有什么特殊的限制,当然挂载功能需要被挂载目录的 Linux 分区,因为这个挂载是 linux 分区的特有功能。
所以无所谓于这个目录是系统建立还是手工建立,也不用考虑他的位置。

但需要注意这个新的分区会掩盖被挂载到目标目录里面的文件,如果掩盖了重要的文件,系统会无法找到,但是被掩盖的文件不会丢失,只是被压住了,分区卸载后文件就会回来。
所以不要随意的挂载/卸载重要数据目录/分区,你要保证系统文件结构的完整性。
linux的分区很不合理,不同的分区是独立的,而不是像父目录和子目录那样包含的,不知道为什么这么设计。还有,为什么不能像windows那样把操作系统安装在一个分区里面?
哪位高手知道请解答一下,谢谢!
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 这么明显。
linux的swap分区必须独立的吧,所以安装系统至少要两个分区;

/是一个分区,/usr也是一个分区,这是不合理的;
要是把/看做我的电脑,才更合理。