细说linux挂载——mount,及其他……

新手涉及到的教学或入门贴,推荐新手必看,版主维护
回复
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

细说linux挂载——mount,及其他……

#1

帖子 adagio » 2010-02-18 18:11

纯粹针对刚刚解封开包的新新手,老鸟们请自觉绕行,否则浪费你的时间你非要逼我做谋杀犯可不光我的事你还没地方说理去。

如果你正好是个崭新的新手,就耐心的花点时间看看吧,至少大概看看,不要在一个陌生又黑暗的到处碰壁,或张皇四顾,像个没头的苍蝇。
现在耐心听我老人家絮絮叨叨没个完的,这点时间绝对值!


续_______________________________________________________________________________________
用linux,就一定要用linux的方式去思维。
嗯,说的容易做起来难。
我的D盘哪去了?恐怕每一个新手初次进入linux桌面后,第一个想知道的就是这个答案吧?
我们就来说说这个D盘。

首先,请放心,他不会莫名其妙的被xx掉。除非你在分区的时侯乱来一气;
其次,你应该明白硬盘分区是怎么回事,否则下面的就别看了,还不会走路就想跑马拉松那是……,根本不可能滴;
再者,你应该明白,文件其实是储存在硬盘的某个分区里,并不是C盘或者D盘里;
最后,抛弃你被widows“固化”了的思维,其意义不仅仅是使你更懂linux,而是可以令你拥有一种更加活跃的思考方式,对你的整个人生可是大大的好喔。

原来事情还可以这样做!
这是我们每一个走向知识的更高阶段后必然会发出的感叹。回想一下,你有多久没有发出过这样的感叹了?如果有一年以上的话——抱歉,你已经老了,至少你的思维是这样。


复习________________________________________________________________________________________
硬盘是干什么用的?废话,当然是存文件的啦。
首先操作系统需要放置一些它自己的文件,其次作为用户的我们自己,需要放置私人的物品——这是所谓存储(写入)。
光放着不行,还要在需要的时候随时拿出来——这是所谓取用(读取),合称存取控制。

既然要控制,就存在个怎么组织这些文件的问题。
如果你的电脑上只有十几二十个文件的话简单了,全放一起就行,那我也不用写这个帖子了,省心。
可惜此事古难全啊,去看看你的windows目录吧,那里面少说也有几千个文件吧?linux虽说比windows简洁,不过可没说文件比windows少,新装好的系统有一万个以上的文件也正常得紧!
试想你把这些文件全放一块,是个啥情况?相信这个世界上没有几个人喜欢这样搞。

不用说了,解决方法连火星人都知道——分类
这时候你应该已经想到了windows的树形目录了吧?
对喔,系统文件全放进c:\windows里,程序文件全放进c:\program files里,你个人的文件全放进c:\Documents and Settings里。
不过大多数有经验的windows用户又会发现一个问题——个人的文件放进c:\Documents and Settings里不好!由于windows的经典蓝屏的不可忽视的存在,这个c:不是个很可靠的地方,一旦它想提醒你它的不可忽视性的时候(天晓得是啥时候),虽然你拥有对硬盘的绝对控制权,但你却不得不面临是干掉匪徒还是拯救人质的两难处境(至于怎么彻底消灭这些匪徒这个问题,恐怕这个世界上没人知道),于是很多聪明人都会明智的选择把私人文件放到d盘或者e盘f盘……,反正只要不是c盘随便哪里都行。

好吧,我们来仔细分析一下以上所说的那堆废话。
c:\ 这个部分是什么意思?
所有的计算机教材都会毫不含糊的告诉你——这是c盘的根目录。
——老师老师,那这个c盘又是在哪里呢?
遇上这么麻烦的学生,一个本着诲人不倦优良传统传统的好教师一定会拿出这个图:
CDE.jpg
——嗯,开头那个19.53G的新加卷(C:)就是c盘了,它位于磁盘的最前面,是主分区,而后面的D盘E盘是逻辑分区。这些分区很像一个大房间里分割出来的小房间,可以分别居住不同人而且互不干扰。
——收到!就是说假如我把一个文件从c盘剪切到d盘的话,那一定是数据从第一个分区挪动到了第二个分区,就像居住在1号房的房客搬家到2号房一样。那根目录又是虾米意思捏?
——嗯,这位同学问的好!大家想想,当我们把一个文件copy到c盘的某个目录的时候,比如说c:\windows吧,我们是怎样找到这里的?
对,先找到c盘,再在其中找到windows目录。所以,这个先找到的c盘就是最基础的一层(或者说最高一层)了,在c:\的前面不用再找任何东西,它就是这颗树的根,所以叫根目录,c盘里的所有目录(文件夹)就是从树根开始出现的分叉点,而c盘里的所有文件都是从这个根上,通过各个分叉(目录)逐渐长出的树叶。我们要寻找某片树叶(文件)的时候,实际上就是从树根开始,根据分叉点的指示最终找到那片树叶的。
而其他的D盘E盘也类似。下课!
——老师老师我明白了,可以这么说——在windows里,每个分区就是一颗树,windows里又很多颗树,树的多少取决于你划分了多少个分区!而这些CDEFG就是这些树的编号!就好像我去一栋大楼里找人,总是要先从1楼上去一样。乌拉!下课啦~~~~~~~~~~~~
在windows里,硬盘上的所有文件都可以通过类似方式找到,很清晰是不?
唯一的问题是——那个C盘根目录也就是第一分区,为什么一定要写成c:\而不能是d:\或者L:\或者干脆就写成\或者别的什么?
不行!这是人家windows规定的,习惯了就好,嗯?
好吧好吧,我是个善于适应的人,就这样挺好……


深究__________________________________________________________________________________________
整理一下思路吧:
:idea: C盘,这是一个编号,一般来说它就是指硬盘的第一分区;
:idea: 这种C盘D盘E盘的概念,是被windows赋予的。因为在一块硬盘没有装入机箱并被windows检测到以前,它就是一个个的分区,没有盘符!第一分区就是第一分区,不是C盘!就算你在上面装入了windows操作系统,但如果没有启动windows,那么它就是第一分区而不是C盘!
:idea: 反之,这种概念,是windows“内在”的,就算windows没有被安装到硬盘的任何分区,这个“构架”依然存在,也就是说这种C盘D盘E盘的概念不依赖于是否有分区供其命名
:idea: 这种概念,在windows接管了电脑硬盘的管理权以后,才具有实际的意义(可以通过类似c:\windows这样的路径存取文件了)。

引用某人的话来说,盘符——是软件级的概念分区——是硬件级的概念
虽然不能说互不相关,但是可以说——他们其中任何一个,都不是另一个的前提或补充,而只是两个相互独立的合作伙伴。
当windows启动的时候,它会检测电脑已连接的所有硬盘上它能够识别的分区(NTFS、FAT32等),并自动为其分配盘符。
这个“分配盘符”的过程,就是挂载(mount)过程(请一定记住这个mount),只不过这个过程完全不用你参与,windows认为所有的分区,不管三七二十一都应该挂上,让你尽情的用。
具体说就是,windows把第一分区关联到c:这个盘符,第二分区关联到d:这个盘符等等,这样当你想在第一分区存取数据的时候,只需要寻找c:就行了。
这样,软件中的磁盘管理概念和实际的硬盘分区紧密关联,二者才具有了真正的实用意义。


Linux__________________________________________________________________________________________
好了,罗哩罗嗦说那么多,只是想顺理成章的引出linux根文件系统的概念。
请注意,这里所说的“文件系统”,跟一般意义上的NTFS、EXT3文件系统不是一码事,别拿来对比哈!
和windows的C盘D盘E盘的概念一样,这个“文件系统”或者叫“组织体系”是软件级别的,是linux系统“内在”的体系,就像你脑子里的一个“想法”,并无需依赖于任何的实际一样。
:idea: linux的系统组织方式是——整个系统从根开始,按树形目录依次向下逐渐扩大,分类存放不同用途的文件,/读作“斜线”,英文slash;当其写作一个路径时,第一个/表示根,即root,其他的/表示路径分割符,但都读作“斜线”或“slash”。

OK,现在让我们把“理想”变成“现实”吧!
:idea: 系统启动时,首先有一个分区被挂载到了/,可以理解为该分区被分配了/这个奇怪“盘符”(注意,在windows里,这个符号被用做命令参数引导符号,而反斜线\,英文backslash作为路径分割符,习惯不同而已,就像英国行车靠左一样,没啥可奇怪的)。
这个被挂载为/的分区,就叫做根分区(不管它是主分区还是逻辑分区),它从此开始在整儿linux系统里具有了特殊的地位,因为整儿电脑里的所有硬盘,包括其上的所有其他分区,不管是主分区、逻辑分区,都将以这个“根分区”为主干,开始构造linux大树,并最终成为这颗树上的一个分支或树叶。整个linux的系统结构里,有且只有一个root(根分区),不可能有第二个(其实,任何一个分区,都可以挂载为/,windows分区也可以。只不过挂载根分区的目的是启动系统,如果/下面没有linux内核及其所需的系统文件的话,将无法引导系统而已。所以这个根分区并不神秘)。
:idea: 你的其他分区只能被继续挂载到/(根分区)下的某个目录里,比如“/mnt”或者“/media”或者“/什么什么”目录,看你喜欢喽。挂载好之后,当你向这个目录读写数据的时候,其实是在向被挂载到该目录的另一个分区读写数据。多个分区在同一个时候只能被挂载到多个不同的目录,比如“/mnt/a”、“/media/123”或者“/home/anywhere”,任何一个处于/之下的目录,都可以用来作为挂载其他分区的“平台”,当然系统需要的目录可不要用哈,你自己新建你自己的用吧。
挂载好之后,你硬盘里的数据,就可以通过类似/path/to/anywhere这样的方式找到;如果没有挂载就找不到喽。
用一个庸俗的比喻来说,“/”相当于c:\,而“/etc、/bin、/sbin、/lib”这些目录大概相当于c:\windows和c:\program files,“/home”相当于c:\Documents and Settings,而当你把第二分区挂载到“/mnt/partition2”的时候,这个目录就相当于d:\了,你地明白?

不信就挂一次试试:

代码: 全选

cd /mnt						(切换到/mnt目录)
sudo mkdir partition2		(新建一个名为partition2的空目录,你可以随意用其他名称)
sudo mount /dev/sda5 partition2	(如果你只有一个硬盘且第二分区是逻辑分区的话,这个命令就将挂载该分区到partition2)
cd partition2				(切换到/mnt/partition2目录)
ls							(列出该目录的文件)
这样应该可以看到你的D盘下的文件了。
既然能挂载就一定能反挂载:

代码: 全选

sudo umount /dev/sda5	(或者/mnt/partition2)
这个命令将“卸载”该分区,现在你再看会发现partition2又是空目录了。




闲话__________________________________________________________________________________________
到这里,有人可能会说“linux太麻烦了,我有十几个分区,难道让我每次都要敲几十行命令?为什么不像windows那样启动时就全给我自动挂上呢?”
1. 我是说过要敲命令,可我没说过“每次”!下面将会介绍的fstab文件将会使你在这件事上一劳永逸的解决问题;事实上,甚至还有一种“零”劳永逸的方法,你甚至一个命令都不用敲,点几下鼠标就好了;
2. 像windows那样全自动挂上?也没有问题啊,装上一两个软件即可,不过我想提醒你:
:idea: 这样真的好吗?未必。我可以肯定,你大多数时间只会使用几个特定的分区;再退一步讲,即使你是例外,但你也应该为别人想想吧?比如我,有一个分区有“敏感”数据(是啥你自己猜),而且不常用,以前用windows的时候,我对这种做法就很讨厌,谁都可以随便瞅一瞅,不好!后来全搬家到linux分区了,平时不挂载,要用才挂上,哈哈哈,我的系统我做主!从此不再受那微软的苦~~~
:idea: “像windows那样”,你的脑子里为什么每时每刻都在这样想?是因为windows的方法最“好”?也未必,顶多只是你习惯了“那样”而已。试想如果你从来都用linux的“这样”,然后有一天我突然给你一台windows电脑的时候,你也一样会疑惑的问我:“我的家目录哪去了?”,“为什么不能搞得像linux那样?”。
承认了吧,所谓“最好”的“那样”是没有的,除了你那个有衰老迹象的思维里,哪儿都没有!赶快活动活动吧。


一个例子__________________________________________________________________________________________

代码: 全选

/			(这就是著名的根)
├── bin			(你在终端运行的大多数程序,比如cp、mv...)
├── boot			(内核放在这里,这个目录也经常被作为某个独立分区的挂载点)
│   └── grub	(grub引导程序和引导菜单就放在这里)
├── cdrom
├── dev			(存放设备文件,这里相当于一个设备管理器,由系统自动生成。视硬件环境不同变化很大)
│   ├── block
│   ├── bsg
│   ├── bus
│   ├── char
│   ├── disk			(磁盘信息,要挂载硬盘分区就要注意这里的信息喽)
│   │   ├── by-id		(硬盘分区的永久性符号链接)
│   │   ├── by-label	(按卷标识别的硬盘分区,常用于挂载)
│   │   ├── by-path	(硬盘分区的节点链接)
│   │   └── by-uuid	(按UUID识别的硬盘分区,常用于挂载)
│   ├── dri
│   ├── fd
│   ├── input
│   ├── net
│   ├── pts
│   ├── shm
│   └── snd
├── etc			(存放所有程序和系统的配制文件和全局变量,对所有用户生效,非常值得备份)
├── home			(这就是著名的home目录了,注意不是”家目录”,强烈建议把一个独立分区挂载到这里!)
│   ├── adagio	(这才是我真正的家!一般来说目录名就是帐号名,当然也可以不是,随便。命令行中用波浪线~代表这里)
│   ├── MNT		(这是我挂载其它硬盘分区的地方,你可以看到用硬盘品牌、容量或用途区分的目录名)
│   │   ├── MAX40NT1	(迈拓40G)
│   │   ├── ST160NT1	(希捷160G第一分区,下面两个类似)
│   │   ├── ST160NT2
│   │   ├── ST160SYS
│   │   ├── ST320G		(希捷320G)
│   │   │   ├── MOVIE
│   │   │   ├── MUSIC
│   │   │   └── P2P	(电驴、BT的缓冲区)
│   │   ├── ST80G		(希捷80G)
│   │   │   ├── PROGRAM
│   │   │   ├── ST80PE
│   │   │   └── YEAR
│   │   └── WD1000		(西数1T)
│   │       ├── WD2
│   │       ├── WD3
│   │       ├── WD5
│   │       ├── WD6.Lib
│   │       └── WD7
│   └── test	(我建立的另一个帐号的家目录,专门用于测试,一旦搞到无法收拾的地步,只需简单的
│					 把里面的所有文件删除,就可以恢复默认。实际上你可以拥有无数个帐号)
├── lib			(所有程序共享的库文件)
├── lost+found	(磁盘扫描出现的丢失的数据)
├── media		(你在文件管理器里点击后自动挂载的分区就在这里,按卷标命名,没有卷标则按大小命名)
├── mnt			(同样用于挂载磁盘,这是最传统的位置,喜欢挂哪里随便)
├── opt			(某些特殊的程序喜欢把数据放在这里,比如JAVA)
├── proc			(当前系统所有的详细信息,这里的”文件”并不存在于硬盘中,而是在内存或缓存里,每次启动后都不一样)
├── root 		(这是系统最高权威root用户的家!他是老大,所以不住在/home里,那里是草民住的)
├── sbin			(类似/bin,存放常用程序,但这里的程序都是要命的啊,比如格式化,所以只有root用户或sudo程序有权使用)
├── srv			(一些服务所要访问的文件)
├── sys			(系统的核心文件,类似/proc,不必管它)
├── tmp			(存放临时文件,所有用户均可使用,不过你要小心啊,这里的所有文件一旦重启就全没了,自动清空的)
├── usr			(你在X下使用的所有程序数据都在这里了,包括图标、manual等。所有用户都可以使用。也是最庞大的目录)
└── var			(variation,顾名思义就是变量,这里存放系统中经常变化的数据。和/tmp不同啊,很有用的地方)
    ├── backups
    ├── cache
    │   └── apt
    │        └── archives	(存放你安装的所有程序的deb包!重装系统时太有用了,一定要备份好,到时候放回来。
    │   						我建议把整儿/var单独挂载到一个独立分区,像/home一样。这样你重装好系统后,只
    │    						需要简单的把整儿分区挂载到/var就行了,省去了备份-还原的时间。要知道这些deb包
    │    						可不是几十M而已,而是有可能几百M、几个G,一来一回可够呛的。你也可以单独挂载
    │    						一个分区到/var/cache/apt/archives,其他的都不要。
    │    						当然,这样又增加了一点系统构造的复杂度,喜欢怎样请自己斟酌。)
    ├── crash
    ├── games
    ├── lib
    ├── local
    ├── lock
    ├── log		(呵呵,这里的文件是系统运行的完整记录,出了问题一定要来这里看看)
    ├── mail		(这里是存放所有用户email的地方)
    ├── opt
    ├── run
    ├── spool
    └── tmp

40616 directories	(根目录下共有40616个子目录,你不会都想浏览一遍吧?所以不重要我全干掉,否则这个帖子没法看了)
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

自定义fstab文件——一个完整的mount过程

#2

帖子 adagio » 2010-02-18 18:11

OK,现在咱们再具体一点,用我的ubuntu的启动过程来做个实例,看看linux是怎么逐步种出这颗大树的。
首先还是说一句,你必需知道UUID是啥玩意儿,或者至少要明白hda、sdc这些编号是啥意思。否则肯定是鸡同鸭讲了。
不想自己google的话,请移步这里看3楼。


grub_______________________________________________________________________________________
:idea: 系统启动当然是从grub开始了,请打开你的/boot/grub/grub.cfg文件,找到类似下面这一段(以下以grub2的菜单为样本,grub0.97的menu.lst其实也类似)。

代码: 全选