Linux学习之挂载

linux的系统组织方式是——整个系统从根开始,按树形目录依次向下逐渐扩大,分类存放不同用途的文件,/读作“斜线”,英文slash;当其写作一个路径时,第一个/表示根,即root,其他的/表示路径分割符,但都读作“斜线”或“slash”。
    系统启动时,首先有一个分区被挂载到了/,可以理解为该分区被分配了/这个奇怪“盘符”(注意,在windows里,这个符号被用做命令参数引导符号,而反斜线\,英文backslash作为路径分割符,习惯不同而已,就像英国行车靠左一样,没啥可奇怪的)。
    这个被挂载为/的分区,就叫做根分区(不管它是主分区还是逻辑分区),它从此开始在整儿linux系统里具有了特殊的地位,因为整个电脑里的所有硬盘,包括其上的所有其他分区,不管是主分区、逻辑分区,都将以这个“根分区”为主干,开始构造linux大树,并最终成为这颗树上的一个分支或树叶。整个linux的系统结构里,有且只有一个root(根分区),不可能有第二个(其实,任何一个分区,都可以挂载为/,windows分区也可以。只不过挂载 根分区的目的是启动系统,如果/下面没有linux内核及其所需的系统文件的话,将无法引导系统而已。所以这个根分区并不神秘)。
    你的其他分区只能被继续挂载到/(根分区)下的某个目录里,比如“/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:\了

代码:

1 cd /mnt                  (切换到/mnt目录)
2 sudo mkdir partition2      (新建一个名为partition2的空目录,你可以随意用其他名称)
3 sudo mount /dev/sda5 partition2   (如果你只有一个硬盘且第二分区是逻辑分区的话,这个命令就将挂载该分区到partition2)
4 cd partition2            (切换到/mnt/partition2目录)
5 ls                     (列出该目录的文件)

这样应该可以看到你的D盘下的文件了。
既然能挂载就一定能反挂载:

代码:

1 sudo umount /dev/sda5   (或者/mnt/partition2)

这个命令将“卸载”该分区,现在你再看会发现partition2又是空目录了。
到这里,有人可能会说“linux太麻烦了,我有十几个分区,难道让我每次都要敲几十行命令?为什么不像windows那样启动时就全给我自动挂上呢?”
 1. 我是说过要敲命令,可我没说过“每次”!下面将会介绍的fstab文件将会使你在这件事上一劳永逸的解决问题;事实上,甚至还有一种“零”劳永逸的方法,你甚至一个命令都不用敲,点几下鼠标就好了;
 2. 像windows那样全自动挂上?也没有问题啊,装上一两个软件即可,不过我想提醒你:
这样真的好吗?未必。我可以肯定,你大多数时间只会使用几个特定的分区;再退一步讲,即使你是例外,但你也应该为别人想想吧?比如我,有一个分区有“敏 感”数据,而且不常用, 平时不挂载,要用才挂上
 “像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

OK,现在咱们再具体一点,用我的ubuntu的启动过程来做个实例,看看linux是怎么逐步种出这颗大树的。
首先还是说一句,你必需知道UUID是啥玩意儿,或者至少要明白hda、sdc这些编号是啥意思。否则肯定是鸡同鸭讲了。
grub__________________________________________________________
 系统启动当然是从grub开始了,请打开你的/boot/grub/grub.cfg文件,找到类似下面这一段(以下以grub2的菜单为样本,grub0.97的menu.lst其实也类似)。

代码:

1 menuentry "Ubuntu 9.10, kernel 2.6.31-17-generic" {
2 search --no-floppy --fs-uuid --set f1bafdd4-73c2-44b2-9a62-d50a2da4d019
3 linux /boot/vmlinuz-2.6.31-17-generic root=UUID=f1bafdd4-73c2-44b2-9a62-d50a2da4d019 ro splash
4 initrd /boot/initrd.img-2.6.31-17-generic
5 }

也可能是这个样子

代码:

1 menuentry "Ubuntu 9.10, kernel 2.6.31-17-generic" {
2 set root=(hd2,6)
3 linux /boot/vmlinuz-2.6.31-17-generic root=/dev/sdc5 ro splash
4 initrd /boot/initrd.img-2.6.31-17-generic
5 }

这是一个标准的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。以下是我的(不要以为我说“指令”就怕怕,其实里面的内容很简单,地球人都能看懂)。

代码:

 1 # /etc/fstab: static file system information.
 2 #
 3 # Use ‘blkid -o value -s UUID‘ to print the universally unique identifier
 4 # for a device; this may be used with UUID= as a more robust way to name
 5 # devices that works even if disks are added and removed. See fstab(5).
 6 #
 7 # <file system> <mount point>   <type>  <options>       <dump>  <pass>
 8 proc   /proc   proc   defaults   0   0
 9 # / was on /dev/sda5 during installation
10 UUID=ce8493a2-73a2-46d3-ac32-fe28ac9ec860   /   ext4   errors=remount-ro   0   0
11 # /home was on /dev/sda6 during installation
12 UUID=5ae0aea4-f7bb-4504-bf0c-f3dbffc8fa0f   /home   ext4   defaults   0   0
13 # swap was on /dev/sda7 during installation
14 UUID=db44da00-1b52-4d25-a870-57d36a6a2a85   none   swap   sw   0   0

或者也可能被写成了这样

代码:

 1 # /etc/fstab: static file system information.
 2 #
 3 # Use ‘blkid -o value -s UUID‘ to print the universally unique identifier
 4 # for a device; this may be used with UUID= as a more robust way to name
 5 # devices that works even if disks are added and removed. See fstab(5).
 6 #
 7 # <file system> <mount point>   <type>  <options>       <dump>  <pass>
 8 proc   /proc   proc   defaults   0   0
 9 # / was on /dev/sda5 during installation
10 /dev/sdc6   /   ext4   errors=remount-ro   0   0
11 # /home was on /dev/sda6 during installation
12 /dev/sdc5   /home   ext4   defaults   0   0
13 # swap was on /dev/sda7 during installation
14 /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),总之,它被系统“霸占”了,你不能直接在这个分区读写任何数据。

时间: 2024-10-06 04:10:47

Linux学习之挂载的相关文章

Linux学习-服务器B挂载服务器A的磁盘

环境: CentOS 7.0 1.centos中服务器B挂载服务器A的磁盘 服务器A:101,.10.0.1 服务器B:101.10.12.1 前提:保证服务器A.B都有/ifs/data/文件夹 目的:在服务器B上把服务器A的/ifs/data/文件夹挂载到自己的/ifs/data/文件夹下. Step1.编辑服务器A的/etc/exports文件 # vi/etc/exports 添加下列内容,让其对服务器B添加信任功能 /ifs/data 101.10.12.1 (rw,no_root_s

《Linux学习并不难》文件系统管理(8):设置开机自动挂载Linux文件系统

18.8  <Linux学习并不难>文件系统管理(8):设置开机自动挂载Linux文件系统 只有将某个分区或是设备进行挂载以后才能使用,但是当计算机重新启动以后,又需要重新挂载,这个时候可以通过修改/etc/fstab文件实现开机自动挂载Linux文件系统.要实现开机自动挂载文件系统,需要在/etc/fstab文件中添加该磁盘分区的相关信息,可以通过提供设备名和UUID实现. 1.使用设备名 编辑/etc/fstab文件,在该文件末尾添加下列内容. /dev/sda5             

Linux学习笔记(一)之外部设备的使用(即挂载)

一.硬件与设备文件 在linux系统下,硬件设备都是以文件的形式存在的,因为不同的硬件设备有不同的文件类型,我们把硬件与系统下对应的文件称作设备文件.设备文件在外部设备与操作系统之间提供了一个接口,这样,用户使用外部设备就相当于使用普通文件一样. 1.设备文件 设备文件在linux系统下存放在/dev下面,设备文件的命名方式主要是主设备号加次设备号,主设备号说明设备类型,次设备号说明具体指哪一个设备. 2.软盘 在linux下的设备文件为/dev/fdx.主设备号fd是软盘驱动(floppydo

linux学习之路之LVM

试想一种情况,当初我们在规划磁盘的时候,只给某一个磁盘或分区之划分了30G的容量,但是后来,随着业务的需求,该磁盘或者分区的使用量会越来越大,等到以后再有数据存放时,发现该磁盘或者分区的容量不够用,此时该怎么办了?可以新增一个磁盘,经过格式化,挂载等过程就可以使用这个磁盘了,再将原来磁盘的数据完全的复制过来.等到后来又发现,规划的磁盘又太大了,然后又使用上述方法来减少磁盘的大小.虽然这种方法可行,但是效率低,比较复杂.不应该是我们首选的方法. 当然,我们可以这样做,将多个磁盘或者分区(PV)组合

linux系统usb挂载

本次例程的环境是在FC6下,通过终端操作的. 注意要挂载U盘需要有管理员的权限. 切换成管理员,输入: su root 然后输入管理员密码,进行密码认证: 成功后,先在 /mnt 下建立一个名叫USB的文件夹,文件夹名称随意: mkdir /mnt/USB 然后将U盘插入电脑的USB接口,再输入: fdisk –l 查看一下磁盘分区的变化情况,我们可以在下图中看到多出了一个 /dev/sdb1 的分区,这个就是刚才插入的U盘设备,当然在不同的系统环境显示的U盘设备名称有所不同: 挂载成功后,我们

Linux学习日志day1——无人值守系统安装DHCP+TFTP+PXE+Kickstar

Linux学习日志day1--无人值守批量系统远程网络安装(DHCP+TFTP+PXE+Kickstar)                                         --作者:江信瀚 服务器环境介绍: 主机名:workstation.example.com 关闭SElinux以及防火墙 虚拟机:VMware(关闭了VMware的DHCP服务) 网卡配置: 静态IP获取! IPV6全部都删除,因为根本用不到 子网IP可以在VMware中设置 8.8.8.8是谷歌的DNS服务器

linux学习之路之磁盘管理和文件系统三

ext3文件系统和ext2文件系统的区别? 在某些时候,某个用户在linux系统上写入数据,这时系统正好断电或者系统核心出现错误,写入的数据仅有inode table和datablock而已,可能会导致之前写过的数据没有保存在磁盘上.而当系统重启后,系统可能会对没有保存的数据进行数据恢复.但是,由于系统并不知道是哪个文件不完整,因此会遍历整个文件系统中inode,来查看block是否完整.不过,当某个文件的数据太大时,数据的恢复时间可能会比较长,而这对于服务器来说是不利的.所以在这种情况下,也就

linux 学习拾缀

这段时间学习python的同时又回头学了下linux了,主要是看视频教程,基于RHEL6学了不少东西,总结记录下,以免过段时间又忘了.持之以恒! 一.学习linux最好用文本命令界面,了解相关命令使用,了解linux的系统结构 application     client  *.com(直接操作硬件)  shell(客户端通过shell调用系统API) API     GLIBC库 api kernel内核  modules         BIOS 硬件层 CPU RAM 磁盘 切换shell

Linux学习日志1-基本知识

1.冯.诺依曼体系计算机五大组成部件: 1.控制器:控制其他四个部件的运作 2.运算器:负责计算加减乘除 3.存储器:存放运算的数据来源与结果 4.输入设备:接收数据输入存入存储器 5.输出设备:从存储器接收数据输出 2.Linux的起源: 1991年一个芬兰大学生Linus Torvalds参考其老师的教学用操作系统Minix的思想(注意仅仅是思想),自己写了一个操作系统内核,命名为Linux 0.0.1,发布在comp.os.minix新闻组上,正式宣告Linux内核的诞生.从那时起,Lin