7.3 磁盘的分区-格式化-检验与挂载
对于一个系统管理者( root )而言,磁盘的的管理是相当重要的一环,尤其近来磁盘已经渐渐的被当成是消耗品了 ..... 如果我们想要在系统里面新增一颗磁盘时,应该有哪些动作需要做的呢:
对磁盘进行分区,以创建可用的 partition ;
对该 partition 进行格式化 (format),以创建系统可用的 filesystem;
若想要仔细一点,则可对刚刚创建好的 filesystem 进行检验;
在 Linux 系统上,需要创建挂载点 (亦即是目录),并将他挂载上来;
当然啰,在上述的过程当中,还有很多需要考虑的,例如磁盘分区 (partition) 需要定多大? 是否需要加入 journal 的功能?inode 与 block 的数量应该如何规划等等的问题。但是这些问题的决定, 都需要与你的主机用途来加以考虑的~所以,在这个小节里面,鸟哥仅会介绍几个动作而已, 更详细的设置值,则需要以你未来的经验来参考啰!
7.3.1 观察磁盘分区状态
由于目前磁盘分区主要有 MBR 以及 GPT 两种格式,这两种格式所使用的分区工具不太一样!你当然可以使用本章预计最后才介绍的 [parted] 这个通通有支持的工具来处理,不过,我们还是比较习惯使用 fdisk 或者是 gdisk 来处理分区啊!因此,我们自然就得要去找一下目前系统有的磁盘有哪些? 这些磁盘是 MBR 还是 GPT 等等的!这样才能处理啦!
lsblk 列出系统上的所有磁盘列表
lsblk 可以看成“ list block device ”的缩写,就是列出所有储存设备的意思!这个工具软件真的很好用喔!来瞧一瞧!
[root@study ~]# lsblk [-dfimpt] [device]
选项与参数:
-d :仅列出磁盘本身,并不会列出该磁盘的分区数据
-f :同时列出该磁盘内的文件系统名称
-i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
-m :同时输出该设备在 /dev 下面的权限数据 (rwx 的数据)
-p :列出该设备的完整文件名!而不是仅列出最后的名字而已。
-t :列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等
范例一:列出本系统下的所有磁盘与磁盘内的分区信息
[root@study ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 40G 0 disk # 一整颗磁盘
|-vda1 252:1 0 2M 0 part
|-vda2 252:2 0 1G 0 part /boot
`-vda3 252:3 0 30G 0 part
|-centos-root 253:0 0 10G 0 lvm / # 在 vda3 内的其他文件系统
|-centos-swap 253:1 0 1G 0 lvm [SWAP]
`-centos-home 253:2 0 5G 0 lvm /home从上面的输出我们可以很清楚的看到,目前的系统主要有个 sr0 以及一个 vda 的设备,而 vda 的设备下面又有三个分区, 其中 vda3 甚至还有因为 LVM 产生的文件系统!相当的完整吧!从范例一我们来谈谈默认输出的信息有哪些。
NAME:就是设备的文件名啰!会省略 /dev 等前导目录!
MAJ:MIN:其实核心认识的设备都是通过这两个代码来熟悉的!分别是主要:次要设备代码!
RM:是否为可卸载设备 (removable device),如光盘、USB 磁盘等等
SIZE:当然就是容量啰!
RO:是否为只读设备的意思
TYPE:是磁盘 (disk)、分区 (partition) 还是只读存储器 (rom) 等输出
MOUTPOINT:就是前一章谈到的挂载点!
blkid 列出设备的 UUID 等参数
虽然 lsblk 已经可以使用 -f 来列出文件系统与设备的 UUID 数据,不过,鸟哥还是比较习惯直接使用 blkid 来找出设备的 UUID 喔! 什么是 UUID 呢?UUID 是全域单一识别码 (universally unique identifier),Linux 会将系统内所有的设备都给予一个独一无二的识别码, 这个识别码就可以拿来作为挂载或者是使用这个设备/文件系统之用了。
如上所示,每一行代表一个文件系统,主要列出设备名称、UUID 名称以及文件系统的类型 (TYPE)!这对于管理员来说,相当有帮助! 对于系统上面的文件系统观察来说,真是一目了然!
parted 列出磁盘的分区表类型与分区信息
虽然我们已经知道了系统上面的所有设备,并且通过 blkid 也知道了所有的文件系统!不过,还是不清楚磁盘的分区类型。 这时我们可以通过简单的 parted 来输出喔!我们这里仅简单的利用他的输出而已~本章最后才会详细介绍这个指令的用法的!
看到上表的说明,你就知道啦!我们用的就是 GPT 的分区格式喔!这样会观察磁盘分区了吗?接下来要来操作磁盘分区了喔!
7.3.2 磁盘分区: gdisk/fdisk
接下来我们想要进行磁盘分区啰!要注意的是:“MBR 分区表请使用 fdisk 分区, GPT 分区表请使用 gdisk 分区!” 这个不要搞错~否则会分区失败的!另外,这两个工具软件的操作很类似,执行了该软件后,可以通过该软件内部的说明数据来操作, 因此不需要硬背!只要知道方法即可。刚刚从上面 [parted] 的输出结果,我们也知道鸟哥这个测试机使用的是 GPT 分区, 因此下面通通得要使用 gdisk 来分区才行!
gdisk
你应该要通过 lsblk 或 blkid 先找到磁盘,再用 parted /dev/xxx print 来找出内部的分区表类型,之后才用 gdisk 或 fdisk 来操作系统。 上表中可以发现 gdisk 会扫描 MBR 与 GPT 分区表,不过这个软件还是单纯使用在 GPT 分区表比较好啦!
老实说,使用 gdisk 这支程序是完全不需要背指令的!如同上面的表格中,你只要按下 ? 就能够看到所有的动作! 比较重要的动作在上面已经用底线画出来了,你可以参考看看。其中比较不一样的是“q 与 w”这两个玩意儿! 不管你进行了什么动作,只要离开 gdisk 时按下“q”,那么所有的动作“都不会生效!”相反的, 按下“w”就是动作生效的意思。所以,你可以随便玩 gdisk ,只要离开时按下的是“q”即可。 ^_^! 好了,先来看看分区表信息吧!
使用“ p ”可以列出目前这颗磁盘的分区表信息,这个信息的上半部在显示整体磁盘的状态。 以鸟哥这颗磁盘为例,这个磁盘共有 40GB 左右的容量,共有 83886080 个扇区,每个扇区的容量为 512Bytes。 要注意的是,现在的分区主要是以扇区为最小的单位喔!
下半部的分区表信息主要在列出每个分区的个别信息项目。每个项目的意义为:
Number:分区编号,1 号指的是 /dev/vda1 这样计算。
Start (sector):每一个分区的开始扇区号码位置
End (sector):每一个分区的结束扇区号码位置,与 start 之间可以算出分区的总容量
Size:就是分区的容量了
Code:在分区内的可能的文件系统类型。Linux 为 8300,swap 为 8200。不过这个项目只是一个提示而已,不见得真的代表此分区内的文件系统喔!
Name:文件系统的名称等等。
从上表我们可以发现几件事情:
整部磁盘还可以进行额外的分区,因为最大扇区为 83886080,但只使用到 65026047 号而已;
分区的设计中,新分区通常选用上一个分区的结束扇区号码数加 1 作为起始扇区号码!
这个 gdisk 只有 root 才能执行,此外,请注意,使用的“设备文件名”请不要加上数字,因为 partition 是针对“整个磁盘设备”而不是某个 partition 呢!所以执行“ gdisk /dev/vda1 ” 就会发生错误啦!要使用 gdisk /dev/vda 才对!
Tips 再次强调,你可以使用 gdisk 在您的磁盘上面胡搞瞎搞的进行实际操作,都不打紧,但是请“千万记住,不要按下 w 即可!”离开的时候按下 q 就万事无妨啰! 此外,不要在 MBR 分区上面使用 gdisk,因为如果指令按错,恐怕你的分区纪录会全部死光光!也不要在 GPT 上面使用 fdisk 啦!切记切记!
用 gdisk 新增分区
如果你是按照鸟哥建议的方式去安装你的 CentOS 7,那么你的磁盘应该会预留一块容量来做练习的。如果没有的话, 那么你可能需要找另外一颗磁盘来让你练习才行呦!而经过上面的观察,我们也确认系统还有剩下的容量可以来操作练习分区! 假设我需要有如下的分区需求:
1GB 的 xfs 文件系统 (Linux)
1GB 的 vfat 文件系统 (Windows)
0.5GB 的 swap (Linux swap)(这个分区等一下会被删除喔!)
那就来处理处理!
重点在“ Last sector ”那一行,那行绝对不要使用默认值!因为默认值会将所有的容量用光!因此它默认选择最大的扇区号码! 因为我们仅要 1GB 而已,所以你得要加上 +1G 这样即可!不需要计算 sector 的数量,gdisk 会根据你填写的数值, 直接计算出最接近该容量的扇区数!每次新增完毕后,请立即“ p ”查看一下结果喔!请继续处理后续的两个分区! 最终出现的画面会有点像下面这样才对!
基本上,几乎都用默认值,然后通过 +1G, +500M 来创建所需要的另外两个分区!比较有趣的是文件系统的 ID 啦!一般来说, Linux 大概都是 8200/8300/8e00 等三种格式, Windows 几乎都用 0700 这样,如果忘记这些数字,可以在 gdisk 内按下:“ L ”来显示喔! 如果一切的分区状态都正常的话,那么就直接写入磁盘分区表吧!
因为 Linux 此时还在使用这颗磁盘,为了担心系统出问题,所以分区表并没有被更新喔!这个时候我们有两个方式可以来处理! 其中一个是重新开机,不过很讨厌!另外一个则是通过 partprobe 这个指令来处理即可!
partprobe 更新 Linux 核心的分区表信息
用 gdisk 删除一个分区
已经学会了新增分区,那么删除分区呢?好!现在让我们将刚刚创建的 /dev/vda6 删除!你该如何进行呢?鸟哥下面很快的处理一遍, 大家赶紧来瞧一瞧先!
Tips 万分注意!不要去处理一个正在使用中的分区!例如,我们的系统现在已经使用了 /dev/vda2 ,那如果你要删除 /dev/vda2 的话, 必须要先将 /dev/vda2 卸载,否则直接删除该分区的话,虽然磁盘还是慧写入正确的分区信息,但是核心会无法更新分区表的信息的! 另外,文件系统与 Linux 系统的稳定性,恐怕也会变得怪怪的!反正!千万不要处理正在使用中的文件系统就对了!
fdisk
虽然 MBR 分区表在未来应该会慢慢的被淘汰,毕竟现在磁盘容量随便都大于 2T 以上了。而对于在 CentOS 7.x 中还无法完整支持 GPT 的 fdisk 来说, 这家伙真的英雄无用武之地了啦!不过依旧有些旧的系统,以及虚拟机的使用上面,还是有小磁盘存在的空间!这时处理 MBR 分区表, 就得要使用 fdisk 啰!
因为 fdisk 跟 gdisk 使用的方式几乎一样!只是一个使用 ? 作为指令提示数据,一个使用 m 作为提示这样而已。 此外,fdisk 有时会使用柱面 (cylinder) 作为分区的最小单位,与 gdisk 默认使用 sector 不太一样!大致上只是这点差别! 另外, MBR 分区是有限制的 (Primary, Extended, Logical...)!不要忘记了!鸟哥这里不使用范例了,毕竟示范机上面也没有 MBR 分区表... 这里仅列出相关的指令给大家对照参考啰!
7.3.3 磁盘格式化(创建文件系统)
分区完毕后自然就是要进行文件系统的格式化啰!格式化的指令非常的简单,那就是“make filesystem, mkfs” 这个指令啦!这个指令其实是个综合的指令,他会去调用正确的文件系统格式化工具软件!因为 CentOS 7 使用 xfs 作为默认文件系统, 下面我们会先介绍 mkfs.xfs ,之后介绍新一代的 EXT 家族成员 mkfs.ext4,最后再聊一聊 mkfs 这个综合指令吧!
XFS 文件系统 mkfs.xfs
我们常听到的“格式化”其实应该称为“创建文件系统 (make filesystem)”才对啦!所以使用的指令是 mkfs 喔!那我们要创建的其实是 xfs 文件系统, 因此使用的是 mkfs.xfs 这个指令才对。这个指令是这样使用的:
使用默认的 xfs 文件系统参数来创建系统即可!速度非常快!如果我们有其他额外想要处理的项目,才需要加上一堆设置值!举例来说,因为 xfs 可以使用多个数据流来读写系统,以增加速度,因此那个 agcount 可以跟 CPU 的核心数来做搭配!举例来说,如果我的服务器仅有一颗 4 核心,但是有启动 Intel 超线程功能,则系统会仿真出 8 颗 CPU 时,那个 agcount 就可以设置为 8 喔!举个例子来瞧瞧:
XFS 文件系统 for RAID 性能优化 (Optional)
我们在第14章会持续谈到进阶文件系统的设置,其中就有磁盘阵列这个东西!磁盘阵列是多颗磁盘组成一颗大磁盘的意思, 利用同步写入到这些磁盘的技术,不但可以加快读写速度,还可以让某一颗磁盘坏掉时,整个文件系统还是可以持续运行的状态!那就是所谓的容错。
基本上,磁盘阵列 (RAID) 就是通过将文件先细分为数个小型的分区区块 (stripe) 之后,然后将众多的 stripes 分别放到磁盘阵列里面的所有磁盘, 所以一个文件是被同时写入到多个磁盘去,当然性能会好一些。为了文件的保全性,所以在这些磁盘里面,会保留数个 (与磁盘阵列的规划有关) 备份磁盘 (parity disk), 以及可能会保留一个以上的备用磁盘 (spare disk),这些区块基本上会占用掉磁盘阵列的总容量,不过对于数据的保全会比较有保障!
那个分区区块 stripe 的数值大多介于 4K 到 1M 之间,这与你的磁盘阵列卡支持的项目有关。stripe 与你的文件数据容量以及性能相关性较高。 当你的系统大多是大型文件时,一般建议 stripe 可以设置大一些,这样磁盘阵列读/写的频率会降低,性能会提升。如果是用于系统, 那么小文件比较多的情况下, stripe 建议大约在 64K 左右可能会有较佳的性能。不过,还是都须要经过测试啦!完全是 case by case 的情况。 更多详细的磁盘阵列我们在第 14 章再来谈,这里先有个大概的认识即可。14 章看完之后,再回来这个小节瞧瞧啰!
文件系统的读写要能够有最优化,最好能够搭配磁盘阵列的参数来设计,这样性能才能够起来!也就是说,你可以先在文件系统就将 stripe 规划好, 那交给 RAID 去存取时,它就无须重复进行文件的 stripe 过程,性能当然会更好!那格式化时,最优化性能与什么咚咚有关呢?我们来假设个环境好了:
我有两个线程的 CPU 数量,所以 agcount 最好指定为 2
当初设置 RAID 的 stripe 指定为 256K 这么大,因此 su 最好设置为 256k
设置的磁盘阵列有 8 颗,因为是 RAID5 的设置,所以有一个 parity (备份碟),因此指定 sw 为 7
由上述的数据中,我们可以发现数据宽度 (swidth) 应该就是 256K*7 得到 1792K,可以指定 extsize 为 1792k
相关数据的来源可以参考文末的说明,这里仅快速的使用 mkfs.xfs 的参数来处理格式化的动作喔!
从输出的结果来看, agcount 没啥问题, sunit 结果是 64 个 block,因为每个 block 为 4K,所以算出来容量就是 256K 也没错! 那个 swidth 也相同!使用 448 * 4K 得到 1792K!那个 extsz 则是算成 Bytes 的单位,换算结果也没错啦!上面是个方式,那如果使用 sunit 与 swidth 直接套用在 mkfs.xfs 当中呢?那你得小心了!因为指令中的这两个参数用的是“几个 512Bytes 的 sector 数量”的意思! 是“数量”单位而不是“容量”单位!因此先计算为:
sunit = 256K/512Byte*1024(Bytes/K) = 512 个 sector
swidth = 7 个磁盘 sunit = 7 512 = 3584 个 sector
所以指令就得要变成如下模样:
再说一次,这边你大概先有个概念即可,看不懂也没关系!等到 14 章看完后,未来回到这里,应该就能够看得懂了! 多看几次!多做几次~操作系统的练习就是这样才能学的会!看得懂! ^_^
EXT4 文件系统 mkfs.ext4
如果想要格式化为 ext4 的传统 Linux 文件系统的话,可以使用 mkfs.ext4 这个指令即可!这个指令的参数快速的介绍一下!
由于数据量较大,因此鸟哥仅列出比较重要的项目而已,提供给你参考。另外,本章稍早之前介绍的 dumpe2fs 现在也可以测试练习了!查阅一下相关的数据吧! 因为 ext4 的默认值已经相当适合我们系统使用,大部分的默认值写入于我们系统的 /etc/mke2fs.conf 这个文件中,有兴趣可以自行前往查阅。 也因此,我们无须额外指定 inode 的容量,系统都帮我们做好默认值啰!只需要得到 uuid 这个咚咚即可啦!
其他文件系统 mkfs
mkfs 其实是个综合指令而已,当我们使用 mkfs -t xfs 时,它就会跑去找 mkfs.xfs 相关的参数给我们使用! 如果想要知道系统还支持哪种文件系统的格式化功能,直接按 [tabl] 就很清楚了!
所以系统还有支持 ext2/ext3/vfat 等等多种常用的文件系统喔!那如果要将刚刚的 /dev/vda5 重新格式化为 VFAT 文件系统呢?
上面就是我们这个章节最后的结果了! /dev/vda4 是 xfs 文件系统,而 /dev/vda5 是 ext4 文件系统喔!都有练习妥当了嘛?
Tips 越来越多同学上课都不听讲,只是很单纯的将鸟哥在屏幕操作的过程“拍照”下来而已~当鸟哥说“开始操作!等一下要检查喔!” 大家就拼命的从手机里面将刚刚的照片抓出来,一个一个指令照着打~
不过,屏幕并不能告诉你“ [tab] 按钮其实不是按下 enter”的结果, 如上所示,同学拼命的按下 mkfs 之后,却没有办法得到下面出现的众多指令,就开始举手...老师!我没办法作到你讲的画面...
拜托读者们,请注意:“我们是要练习 Linux 系统,不是要练习 "英文打字"”啦!英文打字回家练就好了! @_@
7.3.4 文件系统检验
由于系统在运行时谁也说不准啥时硬件或者是电源会有问题,所以“死机”可能是难免的情况(不管是硬件还是软件)。 现在我们知道文件系统运行时会有磁盘与内存数据非同步的状况发生,因此莫名其妙的死机非常可能导致文件系统的错乱。 问题来啦,如果文件系统真的发生错乱的话,那该如何是好?就...挽救啊!不同的文件系统救援的指令不太一样,我们主要针对 xfs 及 ext4 这两个主流来说明而已喔!
xfs_repair 处理 XFS 文件系统
当有 xfs 文件系统错乱才需要使用这个指令!所以,这个指令最好是不要用到啦!但有问题发生时,这个指令却又很重要...
xfs_repair 可以检查/修复文件系统,不过,因为修复文件系统是个很庞大的任务!因此,修复时该文件系统不能被挂载! 所以,检查与修复 /dev/vda4 没啥问题,但是修复 /dev/centos/home 这个已经挂载的文件系统时,嘿嘿!就出现上述的问题了! 没关系,若可以卸载,卸载后再处理即可。
Linux 系统有个设备无法被卸载,那就是根目录啊!如果你的根目录有问题怎办?这时得要进入单人维护或救援模式,然后通过 -d 这个选项来处理! 加入 -d 这个选项后,系统会强制检验该设备,检验完毕后就会自动重新开机啰!不过,鸟哥完全不打算要进行这个指令的实做... 永远都不希望实做这东西...
fsck.ext4 处理 EXT4 文件系统
fsck 是个综合指令,如果是针对 ext4 的话,建议直接使用 fsck.ext4 来检测比较妥当!那 fsck.ext4 的选项有下面几个常见的项目:
无论是 xfs_repair 或 fsck.ext4,这都是用来检查与修正文件系统错误的指令。注意:通常只有身为 root 且你的文件系统有问题的时候才使用这个指令,否则在正常状况下使用此一指令, 可能会造成对系统的危害!通常使用这个指令的场合都是在系统出现极大的问题,导致你在 Linux 开机的时候得进入单人单机模式下进行维护的行为时,才必须使用此一指令!
另外,如果你怀疑刚刚格式化成功的磁盘有问题的时后,也可以使用 xfs_repair/fsck.ext4 来检查一磁盘呦!其实就有点像是 Windows 的 scandisk 啦!此外,由于 xfs_repair/fsck.ext4 在扫瞄磁盘的时候,可能会造成部分 filesystem 的修订,所以“执行 xfs_repair/fsck.ext4 时, 被检查的 partition 务必不可挂载到系统上!亦即是需要在卸载的状态喔!”
7.3.5 文件系统挂载与卸载
我们在本章一开始时的[挂载点的意义]当中提过挂载点是目录, 而这个目录是进入磁盘分区(其实是文件系统啦!)的入口就是了。不过要进行挂载前,你最好先确定几件事:
单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
单一目录不应该重复挂载多个文件系统;
要作为挂载点的目录,理论上应该都是空目录才是。
尤其是上述的后两点!如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失。 举个例子来说,假设你的 /home 原本与根目录 (/) 在同一个文件系统中,下面原本就有 /home/test 与 /home/vbird 两个目录。然后你想要加入新的磁盘,并且直接挂载 /home 下面,那么当你挂载上新的分区时,则 /home 目录显示的是新分区内的数据,至于原先的 test 与 vbird 这两个目录就会暂时的被隐藏掉了!注意喔!并不是被覆盖掉, 而是暂时的隐藏了起来,等到新分区被卸载之后,则 /home 原本的内容就会再次的跑出来啦!
而要将文件系统挂载到我们的 Linux 系统上,就要使用 mount 这个指令啦! 不过,这个指令真的是博大精深~粉难啦!我们学简单一点啊~ ^_^
基本上,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 来识别文件系统,会比设备名称与标头名称还要更可靠!因为是独一无二的啊!
挂载 xfs/ext4/vfat 等文件系统
挂载 CD 或 DVD 光盘
请拿出你的 CentOS 7 原版光盘出来,然后放入到光驱当中,我们来测试一下这个玩意儿啰!
光驱一挂载之后就无法退出光盘片了!除非你将他卸载才能够退出! 从上面的数据你也可以发现,因为是光盘嘛!所以磁盘使用率达到 100% ,因为你无法直接写入任何数据到光盘当中! 此外,如果你使用的是图形界面,那么系统会自动的帮你挂载这个光盘到 /media/ 里面去喔!也可以不卸载就直接退出! 但是文字界面没有这个福利就是了! ^_^
Tips 话说当时年纪小 (其实是刚接触 Linux 的那一年, 1999 年前后),摸 Linux 到处碰壁!连将 CDROM 挂载后, 光驱竟然都不让我退片!那个时候难过的要死!还用回纹针插入光驱让光盘退片耶!不过如此一来光盘就无法被使用了! 若要再次使用光驱,当时的解决的方法竟然是“重新开机!”囧的可以啊!
挂载 vfat 中文U盘 (USB磁盘)
请拿出你的U盘并插入 Linux 主机的 USB接口中!注意,你的这个U盘不能够是 NTFS 的文件系统喔!接下来让我们测试测试吧!
如果带有中文文件名的数据,那么可以在挂载时指定一下挂载文件系统所使用的语系数据。 在 man mount 找到 vfat 文件格式当中可以使用 codepage 来处理!中文语系的代码为 950 喔!另外,如果想要指定中文是万国码还是大五码, 就得要使用 iocharset 为 utf8 还是 big5 两者择一了!因为鸟哥的U盘使用 utf8 编码,因此将上述的 big5 前面加上 # 符号, 代表注解该行的意思啰!
万一你使用的 USB 磁盘被格式化为 NTFS 时,那可能就得要动点手脚,因为默认的 CentOS 7 并没有支持 NTFS 文件系统格式! 所以你得要安装 NTFS 文件系统的驱动程序后,才有办法处理的!这部份我们留待 22 章讲到 yum 服务器时再来谈吧! 因为目前我们也还没有网络、也没有讲软件安装啊! ^_^
重新挂载根目录与挂载不特定目录
整个目录树最重要的地方就是根目录了,所以根目录根本就不能够被卸载的!问题是,如果你的挂载参数要改变, 或者是根目录出现“只读”状态时,如何重新挂载呢?最可能的处理方式就是重新开机 (reboot)! 不过你也可以这样做:
重点是那个“ -o remount,xx ”的选项与参数!请注意,要重新挂载 (remount) 时, 这是个非常重要的机制!尤其是当你进入单人维护模式时,你的根目录常会被系统挂载为只读,这个时候这个指令就太重要了!
另外,我们也可以利用 mount 来将某个目录挂载到另外一个目录去喔!这并不是挂载文件系统,而是额外挂载某个目录的方法! 虽然下面的方法也可以使用 symbolic link 来链接,不过在某些不支持符号链接的程序运行中,还是得要通过这样的方法才行。
看起来,其实两者链接到同一个 inode 嘛! ^_^ 没错啦!通过这个 mount --bind 的功能, 您可以将某个目录挂载到其他目录去喔!而并不是整块 filesystem 的啦!所以从此进入 /data/var 就是进入 /var 的意思喔!
umount (将设备文件卸载)
就是直接将已挂载的文件系统给他卸载即是!卸载之后,可以使用 df 或 mount 看看是否还存在目录树中? 卸载的方式,可以下达设备文件名或挂载点,均可接受啦!下面的范例做看看吧!
由于通通卸载了,此时你才可以退出光盘片、软盘片、U盘等设备喔!如果你遇到这样的情况:
由于你目前正在 /data/cdrom/ 的目录内,也就是说其实“你正在使用该文件系统”的意思!所以自然无法卸载这个设备!那该如何是好?就“离开该文件系统的挂载点”即可。以上述的案例来说, 你可以使用“ cd / ”回到根目录,就能够卸载 /data/cdrom 啰!简单吧!
7.3.6 磁盘/文件系统参数修订
某些时刻,你可能会希望修改一下目前文件系统的一些相关信息,举例来说,你可能要修改 Label name , 或者是 journal 的参数,或者是其他磁盘/文件系统运行时的相关参数 (例如 DMA 启动与否~)。 这个时候,就得需要下面这些相关的指令功能啰~
mknod
还记得我们说过,在 Linux 下面所有的设备都以文件来代表吧!但是那个文件如何代表该设备呢? 很简单!就是通过文件的 major 与 minor 数值来替代的~所以,那个 major 与 minor 数值是有特殊意义的,不是随意设置的喔!我们在 lsblk 指令的用法里面也谈过这两个数值呢!举例来说,在鸟哥的这个测试机当中, 那个用到的磁盘 /dev/vda 的相关设备代码如下:
上表当中 252 为主要设备代码 (Major) 而 0~5 则为次要设备代码 (Minor)。 我们的 Linux 核心认识的设备数据就是通过这两个数值来决定的!举例来说,常见的磁盘文件名 /dev/sda 与 /dev/loop0 设备代码如下所示:
/dev/sda
8
0-15
/dev/sdb
8
16-31
/dev/loop0
7
0
/dev/loop1
7
1
如果你想要知道更多核心支持的硬件设备代码 (major, minor) 请参考核心官网的链接。 基本上,Linux 核心 2.6 版以后,硬件文件名已经都可以被系统自动的实时产生了,我们根本不需要手动创建设备文件。 不过某些情况下面我们可能还是得要手动处理设备文件的,例如在某些服务被关到特定目录下时(chroot), 就需要这样做了。此时这个 mknod 就得要知道如何操作才行!
xfs_admin 修改 XFS 文件系统的 UUID 与 Label name
如果你当初格式化的时候忘记加上标头名称,后来想要再次加入时,不需要重复格式化!直接使用这个 xfs_admin 即可。 这个指令直接拿来处理 LABEL name 以及 UUID 即可啰!
不知道你会不会有这样的疑问:“鸟哥啊,既然 mount 后面使用设备文件名 (/dev/vda4) 也可以挂载成功,那你为什么要用很讨厌的很长一串的 UUID 来作为你的挂载时写入的设备名称啊?”问的好!原因是这样的:“因为你没有办法指定这个磁盘在所有的 Linux 系统中,文件名一定都会是 /dev/vda !”
举例来说,我们刚刚使用的U盘在鸟哥这个测试系统当中查询到的文件名是 /dev/sda,但是当这个U盘放到其他的已经有 /dev/sda 文件名的 Linux 系统下,它的文件名就会被指定成为 /dev/sdb 或 /dev/sdc 等等。反正,不会是 /dev/sda 了!那我怎么用同一个指令去挂载这只U盘呢? 当然有问题吧!但是 UUID 可是很难重复的!看看上面 uuidgen 产生的结果你就知道了!所以你可以确定该名称不会被重复! 这对系统管理上可是相当有帮助的!它也比 LABEL name 要更精准的多呢! ^_^
tune2fs 修改 ext4 的 label name 与 UUID
这个指令的功能其实很广泛啦~上面鸟哥仅列出很简单的一些参数而已,更多的用法请自行参考 man tune2fs 。
Last updated