我们在本章一开始时的挂载点的意义当中提过挂载点是目录, 而这个目录是进入磁盘分区槽(其实是 文件系统啦!)的入口就是了。不过要进行挂载前,你最好先确定几件事:
单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
单一目录不应该重复挂载多个文件系统;
要作为挂载点的目录,理论上应该都是空目录才是。
尤其是上述的后两点!如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录 下的东西就会暂时的消失。 举个例子来说,假设你的 /home 原本与根目录 (/) 在同一个文件系统中, 底下原本就有 /home/test 与 /home/initroot 两个目录。然后你想要加入新的磁盘,并且直接挂载 /home 底下,那么当你挂载上新的分区槽时,则 /home 目录显示的是新分区槽内的资料,至于原先的 test 与 initroot 这两个目录就会暂时的被隐藏掉了!注意喔!并不是被覆盖掉, 而是暂时的隐藏了起来,等 到新分区槽被卸除之后,则 /home 原本的内容就会再次的跑出来啦!
而要将文件系统挂载到我们的 Linux 系统上,就要使用 mount 这个指令啦! 不过,这个指令真的 是博大精深~粉难啦!我们学简单一点啊~ ^_^

              [root@initroot ~]# mount -a
              [root@initroot ~]# mount [-l]
              [root@initroot ~]# mount [-t 文件系统] LABEL='' 挂载点
              [root@initroot ~]# mount [-t 文件系统] UUID='' 挂载点
              [root@initroot ~]# mount [-t 文件系统] 装置文件名
              
# 近期建议用这种方式喔! 挂载点
选项与参数:
-a :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
-l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!
-t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,
reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运作。 但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。
-o :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等: async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的 内存机制,请参考文件系统运作方式。预设为 async。
atime,noatime: 是否修订文件的读取时间(atime)。为了效能,某些时刻可使用 noatime
ro, rw: 挂载文件系统成为只读(ro) 或可擦写(rw)
auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)
dev, nodev: 是否允许此 filesystem 上,可建立装置文件? dev 为可允许
suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?
exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?
user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说,
mount 仅有 root 可以进行,但下达 user 参数,则可让
一般 user 也能够对此 partition 进行 mount 。
defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and asyncremount: 重新挂载,这在系统出错,或重新更新参数时,很有用!
基本上,CentOS 7 已经太聪明了,因此你不需要加上 -t 这个选项,系统会自动的分析最恰当的文件 系统来尝试挂载你需要的装置! 这也是使用 blkid 就能够显示正确的文件系统的缘故!那 CentOS 是怎么找出文件系统类型的呢? 由于文件系统几乎都有 superblock ,我们的 Linux 可以透过分析 superblock 搭配 Linux 自己的驱动程序去测试挂载, 如果成功的套和了,就立刻自动的使用该类型 的文件系统挂载起来啊!那么系统有没有指定哪些类型的 filesystem 才需要进行上述的挂载测试呢? 主要是参考底下这两个文件:
/etc/filesystems:系统指定的测试挂载文件系统类型的优先级;
/proc/filesystems:Linux 系统已经加载的文件系统类型。
那我怎么知道我的 Linux 有没有相关文件系统类型的驱动程序呢?我们 Linux 支持的文件系统之 驱动程序都写在如下的目录中:
/lib/modules/$(uname -r)/kernel/fs/ 例如 ext4 的驱动程序就写在『/lib/modules/$(uname -r)/kernel/fs/ext4/』这个目录下啦! 另外,过去我们都习惯使用装置文件名然后直接用该档名挂载, 不过近期以来比较建议使用 UUID 来识别文件系统,会比装置名称与标头名称还要更可靠!因为是独一无二的啊!

mount命令用于挂载文件系统
unmount命令则正好相反,用于卸载文件系统

mount devicetarget mountpoint
#将sdb1挂载到/mnt目录下
$ mount /dev/sdb1 /mnt

挂载 xfs/ext4/vfat 等文件系统

回到顶部
范例:找出 /dev/vda4 的 UUID 后,用该 UUID 来挂载文件系统到 /data/xfs 内
              [root@initroot ~]# blkid /dev/vda4
              /dev/vda4: UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" TYPE="xfs"
              [root@initroot ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs
              mount: mount point /data/xfs does not exist
              # 非正规目录!所以手动建立它!
              [root@initroot ~]# mkdir -p /data/xfs
              [root@initroot ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs
              [root@initroot ~]# df /data/xfs
              Filesystem
              /dev/vda4
              1K-blocks
              Used Available Use% Mounted on
              1038336 32864
              1005472
              4% /data/xfs
              # 顺利挂载,且容量约为 1G 左右没问题!
              
范例:使用相同的方式,将 /dev/vda5 挂载于 /data/ext4
              [root@initroot ~]# blkid /dev/vda5
              /dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4"
              [root@initroot ~]# mkdir /data/ext4
              [root@initroot ~]# mount UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" /data/ext4
              [root@initroot ~]# df /data/ext4Filesystem
              /dev/vda5
              
              1K-blocks
              999320
              Used Available Use% Mounted on
              2564
              927944
              1% /data/ext4
              
挂载 CD 或 DVD 光盘 请拿出你的 CentOS 7 原版光盘出来,然后放入到光驱当中,我们来测试一下这个玩意儿啰!
范例:将你用来安装 Linux 的 CentOS 原版光盘拿出来挂载到 /data/cdrom!
              [root@initroot ~]# blkid
              .....(前面省略).....
              /dev/sr0: UUID="2015-04-01-00-21-36-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
              [root@initroot ~]# mkdir /data/cdrom
              [root@initroot ~]# mount /dev/sr0 /data/cdrom
              mount: /dev/sr0 is write-protected, mounting read-only
              [root@initroot ~]# df /data/cdrom
              Filesystem
              /dev/sr0
              1K-blocks
              Used Available Use% Mounted on
              7413478 7413478
              0 100% /data/cdrom
              
# 怎么会使用掉 100% 呢?是啊!因为是 DVD 啊!所以无法再写入了啊! 光驱一挂载之后就无法退出光盘片了!除非你将他卸除才能够退出! 从上面的数据你也可以发现, 因为是光盘嘛!所以磁盘使用率达到 100% ,因为你无法直接写入任何数据到光盘当中! 此外,如 果你使用的是图形界面,那么系统会自动的帮你挂载这个光盘到 /media/ 里面去喔!也可以不卸除就 直接退出! 但是文字界面没有这个福利就是了! ^_^
话说当时年纪小 (其实是刚接触 Linux 的那一年, 1999 年前后),摸 Linux 到处碰壁! 连将 CDROM 挂载后, 光驱竟然都不让我退片!那个时候难过的要死!还用回形针插入光驱让光盘退片耶!不过 如此一来光盘就无法被使用了! 若要再次使用光驱,当时的解决的方法竟然是『重新启动! 』囧的可以啊!

挂载 vfat 中文随身碟 (USB 磁盘)

回到顶部
请拿出你的随身碟并插入 Linux 主机的 USB 槽中!注意,你的这个随身碟不能够是 NTFS 的文件 系统喔!接下来让我们测试测试吧!
范例:找出你的随身碟装置的 UUID,并挂载到 /data/usb 目录中
              [root@initroot ~]# blkid
              /dev/sda1: UUID="35BC-6D6B" TYPE="vfat"[root@initroot ~]# mkdir /data/usb
              [root@initroot ~]# 
              mount -o codepage=950,iocharset=utf8 UUID="35BC-6D6B" /data/usb
              [root@initroot ~]# # mount -o codepage=950,iocharset=big5 UUID="35BC-6D6B" /data/usb
              [root@initroot ~]# df /data/usb
              Filesystem
              /dev/sda1
              1K-blocks
              2092344
              Used Available Use% Mounted on
              4
              2092340
              1% /data/usb
              
如果带有中文文件名的数据,那么可以在挂载时指定一下挂载文件系统所使用的语系数据。 在 man mount 找到 vfat 文件格式当中可以使用 codepage 来处理!中文语系的代码为 950 喔!另外,如果 想要指定中文是万国码还是大五码, 就得要使用 iocharset 为 utf8 还是 big5 两者择一了!因为鸟 哥的随身碟使用 utf8 编码,因此将上述的 big5 前面加上 # 符号, 代表批注该行的意思啰! 万一你使用的 USB 磁盘被格式化为 NTFS 时,那可能就得要动点手脚,因为预设的 CentOS 7 并 没有支持 NTFS 文件系统格式! 所以你得要安装 NTFS 文件系统的驱动程序后,才有办法处理的! 这部份我们留待 22 章讲到 yum 服务器时再来谈吧! 因为目前我们也还没有网络、也没有讲软件 安装啊! ^_^

重新挂载根目录与挂载不特定目录

回到顶部
整个目录树最重要的地方就是根目录了,所以根目录根本就不能够被卸除的!问题是,如果你的挂载 参数要改变, 或者是根目录出现『只读』状态时,如何重新挂载呢?最可能的处理方式就是重新启 动 (reboot)! 不过你也可以这样做:
范例:将 / 重新挂载,并加入参数为 rw 与 auto
              [root@initroot ~]# mount -o remount,rw,auto /
              
重点是那个『 -o remount,xx 』的选项与参数!请注意,要重新挂载 (remount) 时, 这是个非常重 要的机制!尤其是当你进入单人维护模式时,你的根目录常会被系统挂载为只读,这个时候这个指令就太重要了! 另外,我们也可以利用 mount 来将某个目录挂载到另外一个目录去喔!这并不是挂载文件系统,而 是额外挂载某个目录的方法! 虽然底下的方法也可以使用 symbolic link 来连结,不过在某些不支持 符号链接的程序运作中,还是得要透过这样的方法才行。
范例:将 /var 这个目录暂时挂载到 /data/var 底下:
              [root@initroot ~]# mkdir /data/var
              [root@initroot ~]# mount --bind /var /data/var
              [root@initroot ~]# ls -lid /var /data/var
              16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /data/var
              16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /var
              # 内容完全一模一样啊!因为挂载目录的缘故!
              [root@initroot ~]# mount | grep var/dev/mapper/centos-root on /data/var type xfs
              (rw,relatime,seclabel,attr2,inode64,noquota)
              
看起来,其实两者连结到同一个 inode 嘛! ^_^ 没错啦!透过这个 mount --bind 的功能, 您可以 将某个目录挂载到其他目录去喔!而并不是整块 filesystem 的啦!所以从此进入 /data/var 就是进入 /var 的意思喔!

umount (将装置文件卸除)

回到顶部
              [root@initroot ~]# umount [-fn] 装置文件名或挂载点
              
选项与参数:
-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下; -l :立刻卸除文件系统,比 -f 还强! -n :不更新 /etc/mtab 情况下卸除。
就是直接将已挂载的文件系统给他卸除即是!卸除之后,可以使用 df 或 mount 看看是否还存在目 录树中? 卸除的方式,可以下达装置文件名或挂载点,均可接受啦!底下的范例做看看吧! 范例:将本章之前自行挂载的文件系统全部卸除:
              [root@initroot ~]# mount
              .....(前面省略).....
              /dev/vda4 on /data/xfs type xfs (rw,relatime,seclabel,attr2,inode64,logbsize=256k,sunit=512,..)
              /dev/vda5 on /data/ext4 type ext4 (rw,relatime,seclabel,data=ordered)
              /dev/sr0 on /data/cdrom type iso9660 (ro,relatime)
              /dev/sda1 on /data/usb type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=950,iocharset=...)
              /dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
              # 先找一下已经挂载的文件系统,如上所示,特殊字体即为刚刚挂载的装置啰!
              # 基本上,卸除后面接装置或挂载点都可以!不过最后一个 centos-root 由于有其他挂载,
              # 因此,该项目一定要使用挂载点来卸除才行!
              [root@initroot ~]# umount /dev/vda4 #用装置文件名来卸除
              [root@initroot ~]# umount /data/ext4 #用挂载点来卸除
              [root@initroot ~]# umount /data/cdrom #因为挂载点比较好记忆!
               [root@initroot ~]# umount /data/usb
              [root@initroot ~]# umount /data/var
              #一定要用挂载点!因为装置有被其他方式挂载
              由于通通卸除了,此时你才可以退出光盘片、软盘片、USB 随身碟等设备喔!如果你遇到这样的情
              况:
              [root@initroot ~]# mount /dev/sr0 /data/cdrom
              [root@initroot ~]# cd /data/cdrom
              [root@initroot cdrom]# umount /data/cdrom
              umount: /data/cdrom: target is busy.(In some cases useful info about processes that use
              the device is found by lsof(8) or fuser(1))
              [root@initroot cdrom]# cd /
              [root@initroot /]# umount /data/cdrom
              
由于你目前正在 /data/cdrom/ 的目录内,也就是说其实『你正在使用该文件系统』的意思!所以自然 无法卸除这个装置!那该如何是好?就『离开该文件系统的挂载点』即可。以上述的案例来说, 你 可以使用『 cd / 』回到根目录,就能够卸除 /data/cdrom 啰!简单吧!

设定开机挂载

回到顶部
手动处理 mount 不是很人性化,我们总是需要让系统『自动』在开机时进行挂载的!本小节就是在 谈这玩意儿! 另外,从 FTP 服务器捉下来的映像档能否不用刻录就可以读取内容?我们也需要谈 谈先!

开机挂载 /etc/fstab 及 /etc/mtab

刚刚上面说了许多,那么可不可以在开机的时候就将我要的文件系统都挂好呢?这样我就不需要每次 进入 Linux 系统都还要在挂载一次呀!当然可以啰!那就直接到 /etc/fstab 里面去修修就行啰!不过, 在开始说明前,这里要先跟大家说一说系统挂载的一些限制:
根目录 / 是必须挂载的,而且一定要先于其它 mount point 被挂载进来。
其它 mount point 必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构原则 (FHS)
所有 mount point 在同一时间之内,只能挂载一次。
所有 partition 在同一时间之内,只能挂载一次。
如若进行卸除,您必须先将工作目录移到 mount point(及其子目录) 之外。
让我们直接查阅一下 /etc/fstab 这个文件的内容吧!
              [root@initroot ~]# cat /etc/fstab
              # Device
              /dev/mapper/centos-root
              Mount point
              /
              filesystem parameters
              dump fsck
              xfs defaults 0 0
              UUID=94ac5f77-cb8a-495e-a65b-2ef7442b837c /boot xfs defaults 0 0
              /dev/mapper/centos-home /home xfs defaults 0 0
              /dev/mapper/centos-swap swap swap defaults 0 0
              
其实 /etc/fstab (filesystem table) 就是将我们利用 mount 指令进行挂载时, 将所有的选项与参数写入 到这个文件中就是了。除此之外, /etc/fstab 还加入了 dump 这个备份用指令的支持! 与开机时是 否进行文件系统检验 fsck 等指令有关。 这个文件的内容共有六个字段,这六个字段非常的重要!你 『一定要背起来』才好! 各个字段的总结数据与详细数据如下:比较龟毛一点,因为某些 distributions 的 /etc/fstab 文件排列方式蛮丑的, 虽然 每一栏之间只要以空格符分开即可,但就是觉得丑,所以通常就会自己排列整齐, 并加上批注符号(就是 # ), 来帮我记忆这些信息!
[装置/UUID 等]
o [挂载点]
[文件系统]
[文件系统参数]
[dump]
[fsck]
第一栏:磁盘装置文件名/UUID/LABEL name:
这个字段可以填写的数据主要有三个项目:
文件系统或磁盘的装置文件名,如 /dev/vda2 等
文件系统的 UUID 名称,如 UUID=xxx
文件系统的 LABEL 名称,例如 LABEL=xxx
因为每个文件系统都可以有上面三个项目,所以你喜欢哪个项目就填哪个项目!无所谓的!只是 从测试机的 /etc/fstab 里面看到的,在挂载点 /boot 使用的已经是 UUID 了喔!那你会说不 是还有多个写 /dev/mapper/xxx 的吗?怎么回事啊? 因为那个是 LVM 啊!LVM 的文件名在你 的系统中也算是独一无二的,这部份我们在后续章节再来谈。 不过,如果为了一致性,你还是可 以将他改成 UUID 也没问题喔!(还是比较建议使用 UUID 喔!) 要记得使用 blkid 或 xfs_admin 来查询 UUID 喔!
o 第二栏:挂载点 (mount point):
: 就是挂载点啊!挂载点是什么?一定是目录啊~要知道啊!忘记的话,请回本章稍早之前的数据 瞧瞧喔!
o 第三栏:磁盘分区槽的文件系统:
在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须要手动写入文件系统才行! 包括 xfs, ext4, vfat, reiserfs, nfs 等等。
o 第四栏:文件系统参数:
记不记得我们在 mount 这个指令中谈到很多特殊的文件系统参数? 还有我们使用过的『-o codepage=950』?这些特殊的参数就是写入在这个字段啦! 虽然之前在 mount 已经提过一次,这 里我们利用表格的方式再汇整一下:
参数
async/sync
异步/同步
内容意义
设定磁盘是否以异步方式运作!预设为 async(效能较佳)auto/noauto 自动/非自动
rw/ro
可擦写/只读
让该分区槽以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给用 户随意变更的, 这里也能够设定为只读。则不论在此文件系统的文件是否设定 w 权限,都无法写入喔!
exec/noexec
可执行/不可执行 限制在此文件系统内是否可以进行『执行』的工作?如果是纯粹用来储存数据的目 录, 那么可以设定为 noexec 会比较安全。不过,这个参数也不能随便使用,因为 你不知道该目录下是否默认会有执行档。
举例来说,如果你将 noexec 设定在 /var ,当某些软件将一些执行文件放置于 /var 下时,那就会产生很大的问题喔! 因此,建议这个 noexec 最多仅设定于你自定义 或分享的一般数据目录。
user/nouser
允许/不允许使用者挂载 是否允许用户使用 mount 指令来挂载呢?一般而言,我们当然不希望一般身份的 user 能使用 mount 啰,因为太不安全了,因此这里应该要设定为 nouser 啰! suid/nosuid 该文件系统是否允许 SUID 的存在?如果不是执行文件放置目录,也可以设定为 nosuid 来取消这个功能!
具有/不具有 suid 权限
defaults
o 当下达 mount -a 时,此文件系统是否会被主动测试挂载。预设为 auto。
同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,预设情况使用 defaults 设定即可!
第五栏:能否被 dump 备份指令作用:
dump 是一个用来做为备份的指令,不过现在有太多的备份方案了,所以这个项目可以不要理会啦! 直接输入 0 就好了!
o 第六栏:是否以 fsck 检验扇区:
早期开机的流程中,会有一段时间去检验本机的文件系统,看看文件系统是否完整 (clean)。 不过 这个方式使用的主要是透过 fsck 去做的,我们现在用的 xfs 文件系统就没有办法适用,因为 xfs 会自己进行检验,不需要额外进行这个动作!所以直接填 0 就好了。 好了,那么让我们来处理一下我们的新建的文件系统,看看能不能开机就挂载呢?
例题:
假设我们要将 /dev/vda4 每次开机都自动挂载到 /data/xfs ,该如何进行? 答: 首先,请用 nano 将底下这一行写入 /etc/fstab 最后面中;
              [root@initroot ~]# nano /etc/fstab
              UUID="e0fa7252-b374-4a06-987a-3cb14f415488"
              /data/xfs
              xfs
              defaults
              
再来看看 /dev/vda4 是否已经挂载,如果挂载了,请务必卸除再说!
              [root@initroot ~]# df
              0 0Filesystem
              1K-blocks
              /dev/vda4
              1038336
              Used Available Use% Mounted on
              32864
              1005472
              4% /data/xfs
              
# 竟然不知道何时被挂载了?赶紧给他卸除先! # 因为,如果要被挂载的文件系统已经被挂载了(无论挂载在哪个目录),那测试就不会进行喔!
              [root@initroot ~]# umount /dev/vda4
              
最后测试一下刚刚我们写入 /etc/fstab 的语法有没有错误!这点很重要!因为这个文件如果写错了, 则你的 Linux 很可能将无法顺利开机完成!所以请务必要测试测试喔!
              [root@initroot ~]# mount -a
              [root@initroot ~]# df /data/xfs
              
最终有看到 /dev/vda4 被挂载起来的信息才是成功的挂载了!而且以后每次开机都会顺利的将此文件系统挂载起 来的! 现在,你可以下达 reboot 重新启动,然后看一下预设有没有多一个 /dev/vda4 呢? /etc/fstab 是开机时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这 两个文件当中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个文件喔!但是,万一 发生你在 /etc/fstab 输入的数据错误,导致无法顺利开机成功,而进入单人维护模式当中,那时候的 / 可是 read only 的状态,当然你就无法修改 /etc/fstab ,也无法更新 /etc/mtab 啰~那怎么办?没关 系,可以利用底下这一招:
              [root@initroot ~]# mount -n -o remount,rw /
              

特殊装置 loop 挂载 (映象档不刻录就挂载使用)

回到顶部
如果有光盘映像文件,或者是使用文件作为磁盘的方式时,那就得要使用特别的方法来将他挂载起来, 不需要刻录啦!

挂载光盘/DVD 映象文件

回到顶部
想象一下如果今天我们从国家高速网络中心(http://ftp.twaren.net)或者是昆山科大(http://ftp.ksu.edu.tw) 下载了 Linux 或者是其他所需光盘/DVD 的映象文件后, 难道一定需要刻录成为光盘才能够使用该 文件里面的数据吗?当然不是啦!我们可以透过 loop 装置来挂载的! 那要如何挂载呢?将整个 CentOS 7.x 的 DVD 映象档捉到测试机上面,然后利用这个文件来挂 载给大家参考看看啰!
              [root@initroot ~]# ll -h /tmp/CentOS-7.0-1406-x86_64-DVD.iso
              -rw-r--r--. 1 root root 3.9G Jul
              7
              2014 /tmp/CentOS-7.0-1406-x86_64-DVD.iso
              
# 看到上面的结果吧!这个文件就是映象档,文件非常的大吧!
              [root@initroot ~]# mkdir /data/centos_dvd[root@initroot ~]# mount -o loop
              /tmp/CentOS-7.0-1406-x86_64-DVD.iso /data/centos_dvd
              [root@initroot ~]# df /data/centos_dvd
              Filesystem
              1K-blocks
              /dev/loop0
              Used Available Use% Mounted on
              4050860 4050860
              0 100% /data/centos_dvd
              
# 就是这个项目! .iso 映象文件内的所有数据可以在 /data/centos_dvd 看到!
              [root@initroot ~]# ll /data/centos_dvd
              total 607
              -rw-r--r--. 1 500 502 14 Jul 5 2014 CentOS_BuildTag #瞧!就是 DVD 的内容啊!
              drwxr-xr-x. 3 500 502 2048 Jul 4 2014 EFI
              -rw-r--r--. 1 500 502 611 Jul 5 2014 EULA
              -rw-r--r--. 1 500 502 18009 Jul 5 2014 GPL
              drwxr-xr-x. 3 500 502 2048 Jul 4 2014 images
              .....(底下省略).....
              [root@initroot ~]# umount /data/centos_dvd/
              
# 测试完成!记得将数据给他卸除!同时这个映像档也被删除了...测试机容量不够大! 非常方便吧!如此一来我们不需要将这个文件刻录成为光盘或者是 DVD 就能够读取内部的数据了! 换句话说,你也可以在这个文件内『动手脚』去修改文件的!这也是为什么很多映象档提供后,还得 要提供验证码 (MD5) 给使用者确认该映象档没有问题!

建立大文件以制作 loop 装置文件!

回到顶部
想一想,既然能够挂载 DVD 的映象档,那么我能不能制作出一个大文件,然后将这个文件格式化 后挂载呢? 好问题!这是个有趣的动作!而且还能够帮助我们解决很多系统的分区不良的情况呢! 举例来说,如果当初在分区时, 你只有分区出一个根目录,假设你已经没有多余的容量可以进行额 外的分区的!偏偏根目录的容量还很大! 此时你就能够制作出一个大文件,然后将这个文件挂载! 如此一来感觉上你就多了一个分区槽啰!用途非常的广泛啦! 底下我们在 /srv 下建立一个 512MB 左右的大文件,然后将这个大文件格式化并且实际挂载来玩一 玩! 这样你会比较清楚在讲啥!

建立大型文件

回到顶部
首先,我们得先有一个大的文件吧!怎么建立这个大文件呢?在 Linux 底下我们有一支很好用的 程序 dd !他可以用来建立空的文件喔!详细的说明请先翻到下一章 压缩指令的运用 来查阅,这 里仅作一个简单的范例而已。 假设我要建立一个空的文件在 /srv/loopdev ,那可以这样做:
              [root@initroot ~]# dd if=/dev/zero of=/srv/loopdev bs=1M count=512
              512+0 records in #读入 512 笔资料
              512+0 records out #输出 512 笔数据
              536870912 bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s
              
# 这个指令的简单意义如下: # if 是 input file ,输入文件。那个 /dev/zero 是会一直输出 0 的装置!# of 是 output file ,将一堆零写入到后面接的文件中。 # bs 是每个 block 大小,就像文件系统那样的 block 意义; # count 则是总共几个 bs 的意思。所以 bs*count 就是这个文件的容量了!
              [root@initroot ~]# ll -h /srv/loopdev
              -rw-r--r--. 1 root root 512M Jun 25 19:46 /srv/loopdev
              
dd 就好像在迭砖块一样,将 512 块,每块 1MB 的砖块堆栈成为一个大文件 (/srv/loopdev) ! 最 终就会出现一个 512MB 的文件!粉简单吧!

建立大型文件

回到顶部

大型文件的格式化

预设 xfs 不能够格式化文件的,所以要格式化文件得要加入特别的参数才行喔!让我们来瞧瞧!
              [root@initroot ~]# mkfs.xfs -f /srv/loopdev
              [root@initroot ~]# blkid /srv/loopdev
              /srv/loopdev: UUID="7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee" TYPE="xfs"
              
其实很简单啦!所以就不输出格式化的结果了!要注意 UUID 的数值,未来会用到! 挂载 那要如何挂载啊?利用 mount 的特殊参数,那个 -o loop 的参数来处理!
              [root@initroot ~]# mount -o loop UUID="7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee" /mnt
              [root@initroot ~]# df /mnt
              Filesystem
              /dev/loop0
              1K-blocks
              Used Available Use% Mounted on
              520876 26372
              494504
              6% /mnt
              
透过这个简单的方法,感觉上你就可以在原本的分区槽在不更动原有的环境下制作出你想要的分区槽 就是了! 这东西很好用的!尤其是想要玩 Linux 上面的『虚拟机』的话, 也就是以一部 Linux 主 机再切割成为数个独立的主机系统时,类似 VMware 这类的软件, 在 Linux 上使用 xen 这个软件, 他就可以配合这种 loop device 的文件类型来进行根目录的挂载,真的非常有用的喔! ^_^ 比较特别的是,CentOS 7.x 越来越聪明了,现在你不需要下达 -o loop 这个选项与参数,它同样可以 被系统挂上来! 连直接输入 blkid 都会列出这个文件内部的文件系统耶!相当有趣!不过,为了考 虑向下兼容性,还是建议你加上 loop 比较妥当喔! 现在,请将这个文件系统永远的自动挂载 起来吧!
              [root@initroot ~]# nano /etc/fstab
              /srv/loopdev
              /data/file
              xfs
              defaults,loop
              0 0
              
# 毕竟系统大多仅查询 block device 去找出 UUID 而已,因此使用文件建置的 filesystem, # 最好还是使用原本的档名来处理,应该比较不容易出现错误讯息的!
              [root@initroot ~]# umount /mnt[root@initroot ~]# mkdir /data/file
              [root@initroot ~]# mount -a
              [root@initroot ~]# df /data/file
              Filesystem
              /dev/loop0
              1K-blocks
              Used Available Use% Mounted on
              520876 26372
              494504
              6% /data/file

              

initroot编辑整理,转载请注明www.initroot.com