OK,现在咱们再具体一点,用我的ubuntu的启动过程来做个实例,看看linux是怎么逐步种出这颗大树的。

首先还是说一句,你必需知道UUID是啥玩意儿,或者至少要明白hda、sdc这些编号是啥意思。否则肯定是鸡同鸭讲了。

不想自己google的话,请移步这里看3楼。

grub_______________________________________________________________________________________

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

代码:

menuentry "Ubuntu 9.10, kernel 2.6.31-17-generic"

{

search --no-floppy --fs-uuid --set

f1bafdd4-73c2-44b2-9a62-d50a2da4d019

linux /boot/vmlinuz-2.6.31-17-generic

root=UUID=f1bafdd4-73c2-44b2-9a62-d50a2da4d019 ro splash

initrd

/boot/initrd.img-2.6.31-17-generic

}

也可能是这个样子

代码:

menuentry "Ubuntu 9.10, kernel 2.6.31-17-generic"

{

set root=(hd2,6)

linux /boot/vmlinuz-2.6.31-17-generic root=/dev/sdc5 ro

splash

initrd

/boot/initrd.img-2.6.31-17-generic

}

这是一个标准的ubuntu引导菜单,menuentry那一行仅仅显示了该项目的名称(包括了后面被花括号围住的所有语句),不必管它;

第二行开始,才真正进入linux系统的引导过程,search顾名思义就是要寻找喽,找什么呢?找内核。

打开你的/boot目录,看看是不是有一个名为vmlinuz-xxxxx的文件,大小一般在10M以内,这就是有名的linux内核。

有了内核,你就有了半个linux操作系统,可以开始引导系统了。

第三行的linux

/boot/vmlinuz-2.6.31-17-generic

这部分,linux是一个指令,它告诉grub程序:“请使用后面给出的这个内核”,于是名为“/boot/vmlinuz-2.6.31-17-generic”的内核将被载入内存,并读取“root=UUID=f1bafdd4-73c2-44b2-9a62-d50a2da4d019(sdc5)”这个分区的一些必需的文件。

第三行的意思是:用名为“/boot/initrd.img-2.6.31-17-generic”的文件先在内存中构造一个“虚拟”的根文件系统,以便于内核检测完硬件信息后载入必需的模块等等,其实这个initrd也可以认为是内核的一部分,只是为了保持vmlinuz的简洁而分离出来的,有的内核甚至根本不需要这个咚咚。

OK,grub的工作到此结束,下面将由linux内核这“半个”系统接管电脑的控制权,开始初始化阶段。

注意,到目前为止还没有开始挂载根分区,所以你可以看到root=xxxxxxxx(sdc5)这个分区是只读(ro)挂载的。

如果你去掉了第三行里的“quiet”参数的话,就可以在屏幕上看到内核初始化中整个儿过程的输出,当然,屏幕滚动会很快,而且内容很多,主要有检测硬件环境、载入相应模块、启动服务等等……。嗯,要启动一台电脑可不是件容易的事是不?

好在目前你只需要关心一件事——挂载。请注意在大约中间阶段将会出现的一行字——Mounting Locale

Filesystem

如果你的linux刚装好的话,因为挂载项不多,可能一闪而过。而如果需要挂载的分区很多,特别是pass参数为1或者2的时候,你就能看见逐一列出的挂载情况了。

fstab_______________________________________________________________________________________

YEAH!真正的分区挂载就此开始。

这个时候linux将会读取一个名为fstab的文件,并按照其中的指令逐行执行,直到读完所有内容,进入系统后快打开看看吧,他位于/etc/fstab。以下是我的(不要以为我说“指令”就怕怕,其实里面的内容很简单,地球人都能看懂)。

代码:

# /etc/fstab: static file system information.

#

#

Use 'blkid -o value -s UUID' to print the universally unique identifier

# for

a device; this may be used with UUID= as a more robust way to name

# devices

that works even if disks are added and removed. See fstab(5).

#

#

system>

proc   /proc   proc   defaults   0   0

# / was

on /dev/sda5 during installation

UUID=ce8493a2-73a2-46d3-ac32-fe28ac9ec860

/   ext4   errors=remount-ro   0   0

# /home was on /dev/sda6 during

installation

UUID=5ae0aea4-f7bb-4504-bf0c-f3dbffc8fa0f   /home   ext4

defaults   0   0

# swap was on /dev/sda7 during

installation

UUID=db44da00-1b52-4d25-a870-57d36a6a2a85   none   swap   sw

0   0

或者也可能被写成了这样

代码:

# /etc/fstab: static file system information.

#

#

Use 'blkid -o value -s UUID' to print the universally unique identifier

# for

a device; this may be used with UUID= as a more robust way to name

# devices

that works even if disks are added and removed. See fstab(5).

#

#

system>

proc   /proc   proc   defaults   0   0

# / was

on /dev/sda5 during installation

/dev/sdc6   /   ext4   errors=remount-ro

0   0

# /home was on /dev/sda6 during installation

/dev/sdc5   /home

ext4   defaults   0   0

# swap was on /dev/sda7 during

installation

/dev/sdc4   none   swap   sw   0   0

1.

请忽略所有以#开头的行,这是注释,给自己看的,linux不会执行它,就算是一行完整的命令也一样,它将被完全的无视。

2.

请记住,每一行就是一条完整命令,不能有换行符。或者说换行符(回车)的作用相当于文章中的句号。

3.

每行中的每个空格或TAB符号是参数分割符号,起作用相当于文章中的逗号。多个相连的空格或TAB将被视为一个。

4.

linux挂载分区的时候将自上而下,顺序执行

第一个起作用的行(第8行)是proc,1楼已经解释过了,咱们不管它;

第二个起作用的行(第10行)是/dev/sdc6那里,这就是linux最先被挂载的根分区了;

再下来(第12行)将继续把sdc5挂载到/home,也就是说,sdc5这个本来关系平等的分区,现在感觉上成了sdc6的一个下级目录;

最后(第14行)将“挂载”swap分区,之所以打上引号,是因为这个交换分区有点特殊,因为他并没有被“附属”于/,而是独立使用的,至少你从根目录开始是找不到它的(所以挂载点并没有被写成/swap),总之,它被系统“霸占”了,你不能直接在这个分区读写任何数据。

到此为止,一个真正“可用”的linux系统创建完毕,可以交付你使用了。

DIY_______________________________________________________________________________________

引用:

等等,你说了半天,可我的D盘E盘F盘到底在哪里啊?

额……,那你也等等,我费劲说了这么多,又打字又贴图的,容易吗我?怎么就是拧不过来你对分区的错误称呼方式呢?回1楼再去看看帖呀,请学会用正确的方法表达你的诉求——“等等,你说了半天,我的第二分区、第三分区……到底在哪里啊?”好不好?

这样才乖喔,蜀黍这就带你去找。

前面说了,如果你的电脑只有一块硬盘的话,那么所有分区都将被编号为sda,SCSI(IDE、SATA、USB

disk) DISK

A的意思,有两个的话就是sdb喽,而sda上的分区将继续被从1开始按物理顺序编号,所以你那个“D盘”,一般来说就是sda2了,请自己打开/etc/fstab(用sudo),在文件的最后加入一行(看不懂这些参数的乖仔请再次移步这里看3楼):

代码:

/dev/sda2

0   0

然后……,不用重启电脑!再说一遍,不要总是用windows思维来套linux!请执行

代码:

sudo mount -a

就可以在看到你要的东西了。

引用:

哎哎哎,再等等,我怎么知道分区编号是几啊,总不至于还要拆硬盘来看吧?

嗯,当然不至于啦,输入一个命令就好

代码:

sudo fdisk

-l

根据分区特征、大小等等信息,总该知道了吧?

这样还不行?那就打开gparted程序,有示意图就肯定没问题了。

有多个硬盘的口口(此处被EE屏蔽),建议使用UUID挂载分区以免混淆,获取UUID请使用blkid命令,看我的

代码:

blkid

/dev/sda1: UUID="4028B77B28B76F12" LABEL="WINXP"

TYPE="ntfs"

/dev/sda5: LABEL="YEAR" UUID="0000-0000" TYPE="vfat"

/dev/sda6: UUID="E4F018CFF018A9B6" LABEL="ST80PE" TYPE="ntfs"

/dev/sda7:

UUID="2A58D7CE58D796C3" LABEL="Program" TYPE="ntfs"

/dev/sda8:

UUID="E46CE5006CE4CDFC" LABEL="Fonts" TYPE="ntfs"

/dev/sdb1:

UUID="B6A4A454A4A4193F" LABEL="320A" TYPE="ntfs"

/dev/sdb3: LABEL="DEBIAN"

UUID="5d1dda14-04e7-42e2-9db9-82e5a1c71d30" TYPE="ext4"

/dev/sdb5:

LABEL="HOME" UUID="f63bf91f-38af-4c0f-92c2-22f57650ef85" TYPE="ext4"

/dev/sdb6: UUID="84c7f174-fd5c-4872-9be8-f6afddca2b14" TYPE="ext4"

LABEL="ARCH"

/dev/sdb7: LABEL="P2P"

UUID="36223d45-f7e2-4b23-a845-7e9fc4a9c5ab" TYPE="ext4"

/dev/sdb8:

LABEL="MUSIC" UUID="068a59a0-d30b-4d9a-896c-233794facfb1" TYPE="ext4"

/dev/sdb9: LABEL="MOVIE" UUID="a4a14993-8675-4905-ae31-f2ca3a89e6ef"

TYPE="ext4"

/dev/sdc1: UUID="4444961844960CB4" LABEL="Windows7" TYPE="ntfs"

/dev/sdc2: UUID="C634795434794907" LABEL="WD2" TYPE="ntfs"

/dev/sdc3:

UUID="24288C6C288C3F34" LABEL="WD3" TYPE="ntfs"

/dev/sdc5:

UUID="30BCB1D9BCB19A34" LABEL="WD5" TYPE="ntfs"

/dev/sdc6:

UUID="5C1CC4F61CC4CBE8" LABEL="WD6.Lib" TYPE="ntfs"

/dev/sdc7:

UUID="5E98D85F98D836ED" LABEL="WD7" TYPE="ntfs"

/dev/sdd1:

UUID="1E7CCB1E7CCAEF97" LABEL="ST160SYS" TYPE="ntfs"

/dev/sdd5:

UUID="C628FB7028FB5E3D" LABEL="ST160NT1" TYPE="ntfs"

/dev/sdd6:

UUID="DC607A20607A0196" LABEL="ST160NT2" TYPE="ntfs"

很清楚吧?根据分区编号、卷标和分区格式,很容易就能找到你需要的UUID,用这个替代/dev/sda2即可。

这是我的fstab最后的样子,没办法,硬盘太多。

代码:

# /etc/fstab: static file system information.

#

#

Use 'blkid -o value -s UUID' to print the universally unique identifier

# for

a device; this may be used with UUID= as a more robust way to name

# devices

that works even if disks are added and removed. See fstab(5).

#

#

system>

proc   /proc   proc   defaults   0   0

# / was

on /dev/sda5 during installation

UUID=ce8493a2-73a2-46d3-ac32-fe28ac9ec860

/   ext4   errors=remount-ro   0   0

# /home was on /dev/sda6 during

installation

UUID=5ae0aea4-f7bb-4504-bf0c-f3dbffc8fa0f   /home   ext4

defaults   0   0

#Seagat 320G

UUID=B6A4A454A4A4193F

/home/MNT/ST320G/320A   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0

0

UUID=36223d45-f7e2-4b23-a845-7e9fc4a9c5ab   /home/MNT/ST320G/P2P   ext4

defaults   0   1

UUID=068a59a0-d30b-4d9a-896c-233794facfb1

/home/MNT/ST320G/MUSIC   ext4   defaults   0

1

UUID=a4a14993-8675-4905-ae31-f2ca3a89e6ef   /home/MNT/ST320G/MOVIE   ext4

defaults   0   1

#Seagat 80G

UUID=E46CE5006CE4CDFC

/home/MNT/ST80G/FONTS   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0       0

LABEL=YEAR

/home/MNT/ST80G/YEAR   vfat    defaults,utf8,umask=000      0

0

UUID=2A58D7CE58D796C3    /home/MNT/ST80G/PROGRAM   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0       0

#Seagat

160G

UUID=C628FB7028FB5E3D    /home/MNT/ST160NT1   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0

0

UUID=DC607A20607A0196    /home/MNT/ST160NT2   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0       0

#WestDigital

1000G

UUID=C634795434794907    /home/MNT/WD1000/WD2   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0

0

UUID=24288C6C288C3F34    /home/MNT/WD1000/WD3   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0

0

UUID=30BCB1D9BCB19A34    /home/MNT/WD1000/WD5   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0

0

UUID=5C1CC4F61CC4CBE8    /home/MNT/WD1000/WD6.Lib   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0

0

UUID=5E98D85F98D836ED    /home/MNT/WD1000/WD7   ntfs-3g

defaults,utf8,umask=000,uid=adagio,gid=users       0

0

这是我画的挂载示意图(只画出单个硬盘,如果四个全画上,这图就成蜘蛛网了),请看:

附件:

mount01.jpg [ 557.67 KiB | 被浏览 28842 次

]

OVER_______________________________________________________________________________________

搞好了这些,你这辈子再也不用为挂载发愁了,安心用吧。

我曾经看到有人发帖说,设定好了的壁纸,一旦重启就没了,变成光板桌面。这是怎么搞的呢?

其实问题很简单,就是——他不懂mount is

what玩意!

我们的ubuntu使用的窗口管理器是gnome套件,用于管理文件的程序(相当于windows的资源管理器)是nautilus(鹦鹉螺)。

这个程序为了方便你的使用,精心打造了一种“点击挂载”方式,要说明的是,这种方式完全与fstab文件无关,它由另一个程序控制。

每次启动gnome以后,nautilus会根据内核检测到的分区信息,逐一把所有未挂载的分区罗列出来,并显示在左侧的“Places”栏里(下图鼠标处)

附件:

N1.jpg [ 42.47 KiB | 被浏览 28840 次

]

当你要使用这个分区的时候,只需“点击”一下,就会在右侧显示出来。

其实这时候gnome执行了几个动作:

1.

根据用户点击的分区,在/media目录创建一个子目录,并使用分区卷标(没有卷标则使用分区容量)命名;

2. mount该分区到此目录;

3.

重启后就卸载,并删除此目录;

于是点击之后你就可以读写该分区了。

这种方式……,有好有不好。

好处是不用去编辑fstab文件,敲大堆的代码,随点随用,不用了右键即可卸载;

不好的地方呢?如同上面的那个壁纸“莫名消失”的困惑一样喽。

因为这种方式需要你每次启动后都要“点击”一下,也就是说它不会“记住”你曾经挂载过的分区,或者说它不是像fstab一样是自动的,顶多算半自动吧。

搞清楚了道理,那壁纸“莫名消失”的问题,也就不“莫名”了?

因为他设置的壁纸储存在“点击挂载”的某个分区,而刚进入桌面的时候你还没有“点击”,所以这张壁纸是“不存在的”,当然就只能看见一个光板桌面了。

很正常是不?

解决这个问题的办法只有一个,就是把壁纸放在fstab挂载的管辖范围之内。

还有人经常问一个问题——我用fstab挂载的分区,为什么不出现在左侧“Places”里了?

是的,这样的确令人感觉不便。

不过解决办法也是一样的简单——加入“书签”。

首先打开nautilus,进入你挂载好的目录(挂载点),按“CTRL+D”(呵呵,跟大多数web浏览器一样喔),或者菜单--->书签--->加入书签,然后就可以在Places的最下面看见它了(下图鼠标处),满意了吧?

附件:

N2.jpg [ 44.28 KiB | 被浏览 28840 次

]

题外话_______________________________________________________________________________________

我的分区,如果在windows里就是酱紫:

本来应该是D盘的WD2,现在被他安排到了P盘,最重要的是这期间根本没有请示过我想不想这样!

当然我可以手动调整,不过我讨厌这样,我的电脑我做主,一个小小OS也敢来随意处置,它好大的胆!

附件:

7.JPG [ 267.95 KiB | 被浏览 28842 次

]

介绍两个自动挂载分区的软件,ntfs-config和ivman,由于这不符合“我的电脑我做主”的精神,我本人从来不用,也强烈反对新手使用,所以具体情况请自己google,杀了你我也不说。

linux挂载文件夹哪个最好,细说linux挂载——mount,及其他……相关推荐

  1. linux mysql 文件夹权限_找到linux文件夹

    FineReport关于Linux下字体乱码终极解决方案 1:在windows下找到系统使用到的字体,这里以楷体举例 •到c盘的windows文件夹的Fonts文件夹里面存放了windows中用到的所 ...

  2. linux遍历文件夹下所有文件大小,Linux系统遍历文件夹 获取文件大小的操作(C语言实现)...

    /** linux 下遍历文件夹以及获取文件大小 */ #include #include #include #include /** 获取文件大小,但是文件大小不能超过2G ,该方法不推荐使用 */ ...

  3. linux将文件夹树状列出,Linux下用tree命令列出树形图

    命令用法: tree 参数: -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容 ...

  4. linux进入文件夹命令,如何在 Linux 中不使用 CD 命令进入目录/文件夹?

    众所周知,如果没有 cd 命令,我们无法 Linux 中切换目录.这个没错,但我们有一个名为 shopt 的 Linux 内置命令能帮助我们解决这个问题. shopt 是一个 shell 内置命令,用 ...

  5. linux 改变文件夹属性,技术|在Linux中用chattr和lsattr命令管理文件和目录属性

    为了允许添加数据,防止更改或者删除等,文件和文件夹可以设定了特定的控制属性.例如,你可以在关键的系统文件或者文件夹中启用属性,然后没有任何用户,包括root,可以删除或者修改它,比如不允许使用像dum ...

  6. linux进入文件夹后退,实验二Linux系统简单文件操作命令

    项目内容这个作业属于哪个课程 这个作业的要求在哪里 学号-姓名17041520-王世腾 作业学习目标1.学习在Linux系统终端下进行命令行操作 2.掌握常用命令行操作并能通过命令行操作解决简单问题 ...

  7. linux修改文件夹的访问权限,linux setfacl chmod g+s 修改文件夹和文件的默认访问权限和所属组...

    linux setfacl chmod g+s 修改文件夹和文件的默认访问权限和所属组 我们在创建一个文件夹或者一个文件的时候,希望集成父文件夹的访问权限和组 修改默认访问权限 setfacl 以及 ...

  8. kali linux 模板文件夹,详解kali linux 常用文件与指令路径

    kali linux 常用文件与指令路径 重启网络 /etc/init.d/networking restart 语言设置文件 /etc/default/locale apt 安装deb保存目录 /v ...

  9. linux 删除文件夹admin 报错 Linux cannot remove is a directory

    在这里用户admin文件夹是一个目录: 1 . 执行命令 rm –rf admin 文件夹就可以实现对目录admin的删除操作. -r是递归处理,就是一层一层的删:-f是强制删除. 或 2 .完全删除 ...

最新文章

  1. Codeforces Round #717 (Div. 2) D(倍增dp)
  2. Docker快速安装RabbitMQ服务
  3. 冲突问题和核心对象和原生js 和 jquer的区别的两个区别(固定格式的区别和入口函数的区别)
  4. 百度地图2021十一大数据:全国高速拥堵里程超7000公里
  5. yoast造成php内存过大_解决PHP处理图片时内存占用过高问题
  6. C语言作业怎么答辩,c语言贪吃蛇如何答辩
  7. 计算机求圆面积公式,如何计算圆的面积?
  8. 升级 Adobe CS5 中的 FlashBuilder 4
  9. 服务器CPU和普通CPU的区别
  10. 微信小程序蓝牙打印(中文乱码已解决)-分包发送(安卓和苹果手机均兼容)
  11. Java身份证、手机号码用*隐藏中间几位
  12. mac搭建IPV6网络环境
  13. PHP3d地球,Photoshop制作真实3D立体地球
  14. 文献阅读系列-2|TBC-Net: A real-time detector for infrared small
  15. 使用scrapy框架爬取斗鱼图片
  16. 自行车LED灯导航仪推出 配自行车专用地图
  17. 阿里云ECS服务器搭建-阿里云开发者社区
  18. 中台战略-读书笔记5
  19. jpg、png、svg、gif等图片格式的区别
  20. 软考之运筹学-伏格尔计算方法

热门文章

  1. Zigbee疑难问题定位以及思路方法分享 (四)
  2. 2007全球杀毒软件排名 + 2007全球防火墙排名
  3. 使用EA绘制UML状态机图
  4. mysql修改数据列_MySQL数据库修改一列内容
  5. 【吐槽系列】如何用最贱蛋的方式将web程序变为桌面应用
  6. 强化你的Cobalt strike之Cortana
  7. arduino/mixly 使用HT16K33 16*8点阵
  8. c语言习题字符指针作函数参数
  9. IntentFilter简述
  10. 2020年国防科大CS预推免