第七章 Linux文件系统(二)

5.文件系统的简单操作

5.1 磁盘与目录的容量

  • df:列出文件系统的整体磁盘使用量
第七章 Linux文件系统(二)_第1张图片
df指令

如果使用"-a"这个参数时,系统会出现/proc这个挂载点,但是里面的东西都是0。这是因为/proc是Linux系统需要加载的系统数据,而且是挂载在内存中的
,所以当然没有占任何的磁盘空间了。

  • du:评估文件系统的磁盘使用量(常用在推算目录所占容量)
第七章 Linux文件系统(二)_第2张图片
du指令

5.2 实体链接与符号链接:ln

在Linux下的链接档有两种,一种是类似Windows的快捷方式功能的文件;另一种是透过文件系统的inode连结来产生新档名,而不是新文件。这种成为实体链接。

  • Hard Link(实体链接,硬式连结或实际连结)

我们知道每个文件都会占用一个inode,想要读取该文件,必须经过目录记录的文件名来指向到正确的inode号码。

也就是说,其实文件名只与目录有关,但是文件内容则与inode有关。那么有没有可能是多个档名对应到同一个inode号码?这就是Hard Link的由来。

所以,简单来说,Hard Link只是在某个目录下新增一笔档名链接到某inode号码到关联记录而已。

举个例子:

第七章 Linux文件系统(二)_第3张图片
ln指令

可以发现,两个档名都连结到34474855这个inode号码。而且也会发现第二个字段由1变成2了。这个字段的意义是:由多少个档名链接到这个inode号码。示意图如下:

第七章 Linux文件系统(二)_第4张图片
实体链接的文件读取示意图

那这样有什么好处?最大的好处就是安全,如果将任何一个档名删除,它的inode与block都还是存在的。

一般来说,Hard Link设定链接文件,磁盘的空间与inode数目都不会改变。从上面图来看,它只是在某个目录下的block中多写入一个关联数据。

事实上Hard Link应该只能在单一文件系统中运行,不能跨文件系统的。所以Hard Link是有限制的:

  • 不能跨filesystem

  • 不能跨连结目录

如果使用Hard Link链接目录,链接的数据需要连同被链接目录下的所有数据都建立链接。例如,要将/etc使用实体链接建立一个/etc_hd的目录时,那么在/etc_hd下的所有档名同时都与/etc下的档名要建立Hard Link,这样当然非常乱了。

  • Symbolic Link(符号链接,也就是快捷方式)

Symbolic Link是在建立一个独立的文件,而这个文件会让数据的读取指向他Link的那个文件的档名。当源档文件被删除后,Symbolic Link的文件也就打不开了。

例如:

symbolic link示例

可以发现链接档的大小为12bytes,因为箭头"->"右边的档名"/etc/crontab"总共12个英文,每个英文占1bytes。

第七章 Linux文件系统(二)_第5张图片
符号链接的文件读取示意图
  • ln指令的使用

假设我们有文件passwd1.txt。我们做"ln passwd1.txt passwd2.txt",此时passwd2.txt就是Hard Link。使用"ls -il"命令,也可以查看到passwd1与passwd2的inode号码相同删除掉其中一个,对另一个也没有影响。我们做"ln -s passwd1.txt passwd3.txt",此时passwd3.txt就是Symbol Link(类似快捷方式)。使用"ls -il"命令,可以查看passwd1与passwd3的inode号码不同属性也发生了变化,删除掉passwd1.txt以后,passwd3.txt将不能使用。

关于目录的Link数量

一个空目录里,他默认的Link数量会是多少呢?就是存在.与..这两个目录。所以新建目录为/tmp/test目录时,基本有三个东西:

  • /tmp/test

  • /tmp/test/.

  • /tmp/test/..

其中/tmp/test与/tmp/test/.其实是一样的,都表示该目录,而/tmp/test/..代表/tmp这个目录。所以说,当我们建立一个新的目录时,新的目录Link数为2,而上层目录的Link数则会加1

5.3 磁盘的分区、格式化、检验、挂载

观察磁盘分区状态(下面的命令经测试已经不是)

  • lsblk 列出系统上的所有磁盘列表

是"list block device"的缩写。

第七章 Linux文件系统(二)_第6张图片
lsblk命令参数
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0    8G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    7G  0 part
  ├─centos-root 253:0    0  6.2G  0 lvm  /
  └─centos-swap 253:1    0  820M  0 lvm  [SWAP]
sr0              11:0    1 1024M  0 rom

可以看到,目前的系统主要有sr0和sda的装置,sda又分为二个分区,其中sda2下面还有LVM产生的文件系统。

NAME:装置的文件名
MAJ:MIN:核心认识的装置都是透过这两个代码来熟悉,分别是 主要:次要装置代码
RM:是否为可卸载装置,如光盘、USB接口
SIZE:装置大小
RO:是否为只读装置
TYPE:装置类型,有磁盘(disk)、分区槽(partition)、只读存储器(rom)等
MOUTPOINT:挂载点

  • blkid 列出装置的UUID等参数,如下所示
[root@localhost ~]# blkid
/dev/sda1: UUID="0c05a3e8-9e53-49e6-ab85-2d7af60ca826" TYPE="xfs"
/dev/sda2: UUID="7OB8ex-dmmC-b7pW-5dvG-GGdr-niJh-XmdZl2" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="be693ffd-55ea-4213-878d-6249272e0bbb" TYPE="xfs"
/dev/mapper/centos-swap: UUID="e3326d04-2925-4a3a-82f3-9be5fb911837" TYPE="swap"
  • parted 列出磁盘的分区表类型与分区信息

使用命令"parted ${deviceName} print",如下所示

[root@localhost ~]# parted /dev/sda1 print
Model: Unknown (unknown)
Disk /dev/sda1: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system  Flags
 1      0.00B  1074MB  1074MB  xfs

我们可以通过"lsblk"或"blkid"先找到磁盘,再用"parted /dev/xxx print"找出内部的分区表类型,之后决定用gdisk或fdisk来操作系统。上面可以看到,分区类型是loop。

磁盘分区:gdisk/fdisk

注意:MBR分区表使用"fdsk"分区,GPT分区表使用"gdisk"分区。但是这两个工具的操作是很类似的。

[root@localhost ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x38d7bb2a.

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition # 删除一个分区
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
    l   list known partition types
   m   print this menu
   n   add a new partition # 增加一个分区
   o   create a new empty DOS partition table
   p   print the partition table # 输出分区表
   q   quit without saving changes # 直接离开不保存分区动作
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit # 离开并保存分区动作
   x   extra functionality (experts only)

不管你进行了什么都工作,离开时按下"q",那么所有的动作都不会生效。按下"w"就是动作生效的意思。

接下来,我们看看分区表信息,在交互界面输入"p"。如下所示:

Command (m for help): p #输出目前磁盘的状态

Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors  #磁盘文件名/扇区总容量
Units = sectors of 1 * 512 = 512 bytes #单一扇区大小为512bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000aecf6  # 磁盘的loop标识符

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    16777215     7339008   8e  Linux LVM

注意!fdisk只有root才能执行;使用装置文件名请不要加上数字,因为partition是针对"整个磁盘装置"而不是某个partition。所以执行"fdisk /dev/sda2" 就会发生错误了。

Device Boot:分区名称
Start:每一个分区槽开始扇区号码
End:每一个分区槽的结束扇区号码位置
Blocks:表示每一个分区的容量
Id和System:分区类型的标识

fdisk新建分区槽

[root@localhost ~]# fdisk /dev/sda
...
Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000aecf6

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
# 先找出最后一个 sector 的号码为2099199(这里我扇区满了,先删除了sda2,可以不保存退出嘛)

Command (m for help): m
Command (m for help): n # 新增一个新的分区
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (2099200-16777215, default 2099200):
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-16777215, default 16777215): +50MB
# 使用"+容量"的方式,可以自己计算扇区号码
Partition 2 of type Linux and of size 48 MiB is set

关于Id值表示的类型,可以在交互界面使用"l"来查看。

我们按下"w"保存后,会出现是否确定的字样,这时按下"y",但是还会出现警告。这时因为这个磁盘目前正在使用,因此系统无法立即加载新的分区表。

解决方式1:重新启动;方式2:使用"partprobe"指令。

partprobe更新Linux核心的分区表信息

使用"partprobe -s"指令来更新分区表信息。

XFS文件系统 mkfs.xfs

我们常听到的"格式化"其实应该称为"构建文件系统(make filesystem)",使用命令"mkfs.xfs"。这个指令使用如下:

[root@localhost ~]# mkfs.xfs [-b bsize] [-d params] [-l params] [-L lable] [-f]  [-r params] 设备名称

选项与参数:
-b:指定block的容量,512bytes到64K,不过最大容量限制为Linux的4K
-d:data section的相关参数值,主要的值有
       agcount=数值:设定需要几个储存群组(AG),通常与CPU有关
       agsize=数值:每个AG设定为多少容量
       file:格式化的设备是个文件而不是个设备(例如虚拟磁盘)
       size=数值:data section的容量
       su=数值:当有RAID时,表示stripe数值,与sw搭配使用
       sw=数值:当有RAID时,用于储存数据的磁盘数量(扣除备份盘)
       sunit=数值:与su相当,不过单位使用的是sector(一个sector有512个bytes)
       swidth=数值:就是su * sw的数值,单位使用的是sector
-f:如果设备内已经有文件系统,需要使用-f强制格式化才行
-i:与inode相关的设定,主要的设定值有
       size=数值:最小256bytes,最大为2K,一般256就够
       internal=[011]:log装置/设备是否为内建,预设为1内建,如果用外部装置/设备,使用下面的设定
       logdev=device:log装置为后面的那个设备上,需设定internal=0
-L:后面接这个文件系统的标头名称Label name
-r:指定realtime section的相关设定值,主要有
       extsize=数值:就是那个重要的extent的数值,一般不指定,但有RAID时,最好设定与swidth的数值相同。最小4K最大1G

XFS文件系统 RAID效能优化

磁盘阵列(RAID)是多个磁盘组成一个大磁盘的意思,利用同步写入到这些磁盘的技术,不但可以加快I/O,还可以让某一个磁盘坏掉时,整个文件系统还是可以运作的状态。

RAID就是通过先将文件先分为多个小型的分区区块(stripe),然后将众多的stripes分别放到磁盘阵列里面的所有磁盘,所以一个文件是同时被分别写入到多个磁盘里的,当然效能会好了。为了文件的安全性,这些磁盘里会保留数个备份磁盘(parity disk),还可能会保留多个备用磁盘(spare disk)。

要想优化文件系统的读写,最好能搭配磁盘阵列的参数来设计。即可以先在文件系统将stripe规划好,交给RAID存取时,它就不用重复进行文件的stripe过程来。下面来假设一个环境:

  • 我有两个线程的CPU数量,所以agcount最好设定为2

  • 设定的RAID的stripe指定为256K,因此su最好设定为256K

  • 设定的磁盘阵列有8个,因为是RAID5的设定,所以有一个parity(备份盘),因此指定sw为7

  • 由上述数据中,我们可以发现数据宽度(swidth)应该是256K*7,因此指定extsize为1792K

注意,如果设定的参数是sunit和swidth直接套用在mkfs.xfs中就要小心了,因为这两个参数单位都表示"几个512bytes的sector"数量。
因此计算为:
sunit = 256 * 1024 / 512 = 512个sector
swidth = 7个磁盘 * sunit = 7 * 512 = 3584个sector

EXT4文件系统 mkfs.ext4

[root@localhost ~]# mkfs.ext4 [-b size] [-L label] 装置/设备名称
选项参数
-b:设定block大小,1K/2K/4K
-L:设定装置/设备的标头名称

其他文件系统 mkfs

mkfs其实是个综合指令,我们使用"mkfs -t xfs"时,它会去找mkfs.xfs相关参数给我们使用。如果想知道还支持哪些文件系统的格式化功能,按两次[tab]:

[root@localhost ~]# mkfs [tab][tab]

5.4 文件系统检验

如果系统在运作时,发生宕机我们该怎么样挽救呢?下面主要针对xfs和ext4来说明

  • xfs_repair 处理XFS文件系统
[root@localhost ~]# xfs_repair [-fnd] 装置/设备名称
选项与参数:
-f:表示后面的装置/设备其实是个文件而不是实体装置
-n:单纯检查并不修改文件系统的任何数据
-d:通常用在单人模式下,针对根目录进行检查与修复。很危险,不要随便使用。

Linux系统有个装置无法被卸除,那就是根目录。如果根目录出问题怎么办?这时需要进入单人模式或救援模式,然后通过-d来处理。

fsck.ext4修复EXT4文件系统

fsck是个综合指令,如果针对ext4,建议直接使用fsck.ext4来检验。

[root@localhost ~]# fsck.ext4 [-pf] [-b superblock] 装置名称
选项与参数:
-p:当文件系统在修复时,若有需要回复y的动作时,自动回复y来继续修复
-f:强制检查。一般来说,如果fsck没有发现任何unclean的旗标,不会主动进入内部检查,若干想强制进入,加上-f
-D:针对文件系统下的目录进行优化配置
-b:接superblock的位置,一般这个选项不用。但是你的superblock损毁时,通过这个参数可以利用文件系统内备份的superblock尝试救援

执行xfs_repair/fsck.ext4时,不能修复已经挂载的文件系统,这个挂载可以解除。

5.5 文件系统挂载与卸除(mount命令)

在进行挂载前,需要确定几件事:

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中

  • 单一目录不应该重复挂载多个文件系统

  • 作为挂载点的目录,理论上应该是空目录:如果你挂载的目录是非空的,挂载文件系统后,原目录的东西会暂时消失。新分区槽被卸除后,原本的内容会再次出现。

[root@localhost ~]# mount -a 
[root@localhost ~]# mount [-l]
[root@localhost ~]# mount [-t 文件系统] LABEL='' 挂载点
[root@localhost ~]# mount [-t 文件系统] UUID='' 挂载点
[root@localhost ~]# mount [-t 文件系统] 装置文件名 挂载点 

选项与参数:
-a:依照配置文件/etc/fstab的数据将所有为挂载的磁盘都挂载上来
-l: 可增列Label名称
-t:指定想要挂载的类型
-n:默认情况,系统会将实际挂载的情况写入/etc/mtab中。如果不想写入,此时要用-n
-o:可以接一些额外的参数。例如账号、密码、读写权限等:
       async,sync:此文件系统是否使用同步写入或异步的内存机制。预设为async。
       atime,noatime:是否修订文件的读取时间。
       ro,rw:挂载系统成为我只读(ro)或可擦写(rw)。
       auto,noauto:允许此文件系统被以mount -a自动挂载。
       dev,nodev:是否允许此文件系统建立装置文件,dev为允许。
       suid,nosuid:是否允许此文件系统含有suid/sgid的文件格式。
       exec,noexec:是否允许此文件系统上拥有可执行binary文件。
       user,nouser:是否允许此文件系统让任何使用者执行mount命令,一般来说,            
mount只有root可执行。但指定user参数,可以让一般user对此分区也能mount。
       defaults:默认值是rw、suid、dev、exec、auto、nouser、async。
       remount:重新挂载或更新参数时使用。

基本上,不需要加-t选项,系统会自动分析最适合的文件系统来尝试挂载你需要的。因为文件系统都有superblock,系统会通过分析superblock搭配Linux自己的驱动程序去测试挂载,系统有没有指定哪些类型的filesystem需要进行挂载测试嗯?主要参考以下两个文件:

  • /etc/filesystem:系统指定的测试挂载文件系统类型的优先级。

  • /proc/filesystem:Linux系统已经加载的文件系统类型。

那么Linux系统有没有相关文件系统类型的驱动程序呢?我们Linux支持的文件系统驱动程序都在以下的目录中:

  • /lib/modules/$(uname -r)/kernel/fs/

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

示例:

# 先找出/dev/xxx的UUID后,用UUID来挂载文件系统到 /data/xfs内
[root@localhost ~]# blkid  /dev/xxx
/dev/xxx: UUID='xxxxxxxxxxxx' TYPE='xfs'

[root@localhost ~]# mount UUID='xxxxxxxxxxxx' /data/xfs
mount:mount point /data/xfs does not exist # 非正规目录,所以要手动建立它

[root@localhost ~]# mkdir -p /data/xfs
[root@localhost ~]# mount UUID='xxxxxxxxxxxx' /data/xfs
[root@localhost ~]# df /data/xfs   # 查看挂载目录的信息

挂载 CD 或 DVD 光盘

示例:例如插入CentOS7光盘,让我们来测试以下,挂载到/data/cdrom下。

[root@localhost ~]# blkid 
...
/dev/sr0:UUID='xxxxxx' LABEL='CentOS 7 x86_64' TYPE='iso9660' PTTYPE='dos'

[root@localhost ~]# mkdir /data/cdrom
[root@localhost ~]# mount /dev/sr0 /data/cdrom
mount:/dev/sr0 is write-protected,mounting read-only

[root@localhost ~]# df /data/cdrom
Filesystem        1K-blocks        Used         Available        Use%        Mounted on 
/dev/sr0             7413478         7413478                0        100%        /data/cdrom

因为是DVD所以使用掉了100%!无法再写入了!光驱一挂载后,就无法退出光盘片了,除非你将它卸除;但如果使用的是图形界面,系统会自动帮你挂载到/media下,可以不用卸载直接推出光盘

挂载 vfat (USB磁盘)

注意,你的USB磁盘不能是NTFS的文件系统。预设的CentOS7并不支持NTFS文件系统格式。需要安装NTFS文件系统的驱动程序。

示例:将你的USB挂载到/data/usb目录

[root@localhost ~]# blkid
/dev/sda1:UUID='xxxxxx' TYPE='vfat'
[root@localhost ~]# mkdir /data/usb
[root@localhost ~]#  mount -o codepage=950,iocharset=utf8 UUID='xxxxxx' /data/usb
[root@localhost ~]# df /data/usb
Filesystem        1K-blocks        Used        Available        Use%        Mounted on
/dev/sda1          2092344                4        2092340          1%          /data/usb

重新挂载根目录&挂载不定目录

根目录不能被卸除的!如果你想改变挂载参数或者根目录出现只读状态,如何重新挂载呢?(也可以重新启动reboot)

[root@localhost ~]# mount -o remount,rw,auto /

另外,还可以使用mount命令将某个目录挂载到另一个目录中。这不算挂载文件系统,只是额外挂载某个目录的办法。

示例:将/var目录暂时挂载到/data/var下

[root@localhost ~]# mkdir /data/var
[root@localhost ~]# mount --bind /var /data/var
[root@localhost ~]#  ls -lid /var /data/var
12582977 drwxr-xr-x. 19 root root 267 Feb 18 01:20 /data/var
12582977 drwxr-xr-x. 19 root root 267 Feb 18 01:20 /var

这样,两个就连结到同一个inode了,所以从此进入/data/var就是进入/var的意思。

umount(将装置文件卸除)

[root@localhost ~]# umount [-fn] 装置文件名或挂载点

选项与参数:
-f:强制卸除。可用在类似网络文件系统(NFS)无法读取到的情况
-l:立刻卸除文件系统,比-f还强
-n:不更新/etc/mtab的情况下卸除

注意:在卸载的时候不要在装置的目录内,它表示"你正在使用该文件系统",所以无法卸除。

5.6 磁盘/文件系统参数修改

有时候,需要修改一下目前文件系统的相关信息。例如,修改Label name,或者journal参数等等,就得用下面的指令了。

  • mknod

Linux下所有装置都以文件代表的,那是怎么代表的呢?这就是通过major和minor号码来表示的。假设我们的/dev/vda的相关装置号码如下:

[root@localhost ~]# ll /dev/vda*
brw-rw----.  1  root  disk  252,0  Jun  24  02:30  /dev/vda
brw-rw----.  1  root  disk  252,1  Jun  24  02:30  /dev/vda1
brw-rw----.  1  root  disk  252,2  Jun  24  02:30  /dev/vda2
brw-rw----.  1  root  disk  252,3  Jun  24  02:30  /dev/vda3
brw-rw----.  1  root  disk  252,4  Jun  24  02:30  /dev/vda4
brw-rw----.  1  root  disk  252,5  Jun  24  02:30  /dev/vda5

252为主要装置代码(major),0-5则为次要装置代码(minor)。这些代码都是有意义的,不要随意设定啊。

基本上,硬件文件名已经都可以被系统自动的实时产生了,我们根本不需要手动建立装置文件。但有时候还是要手动的,比如在某些服务被关到特定目录下面时,我们可以这样做:

[root@localhost ~]# mknod 装置文件名 [bcp] [Major] [Minor]

选项与参数:
bcp表示装置的类型:
b:设定装置名称为一个周边储存设备文件,例如磁盘等
c:设定装置名称为一个周边输入设备文件,例如鼠标/键盘等
p:设定装置名称巍峨一个FIFO文件
Major:主要装置代码
Minor:次要装置代码

示例:由上述可知,如果是/dev/vda10,装置代码就为252,10
[root@localhost ~]# mknod /dev/vda10 b 252 10
[root@localhost ~]# ll /dev/vda10
brw-rw----.  1  root  root  252,10  Jun  24  02:30  /dev/vda10

示例:建立一个FIFO文件,档名为/tmp/testpipe
[root@localhost ~]# mknod /tmp/testpipe p
[root@localhost ~]# ll /tmp/testpipe
prw-rw----.  1  root   root 0 Jun  24  02:30  /tmp/testpipe

示例:删除FIFO文件
[root@localhost ~]# rm /dev/vda10  /tmp/testpipe
  • xfs_admin修改XFS文件系统的UUID与Label name

如果当初格式化的时候忘了加标头名称,可以在修改的。

[root@localhost ~]# xfs_admin [-lu] [-L label] [-U uuid] 装置文件名

选项与参数:
-l:列出装置的Label name
-u:列出装置的UUID
-L:设定装置的Label name
-U:设定装置的UUID

示例:设定/dev/vda4的UUID,并测试挂载
[root@localhost ~]# umount /dev/vda4 #使用前,先卸除
[root@localhost ~]# uuidgen #可以生成UUID
xxxxxxxxxxxxx
[root@localhost ~]# xfs_admin -u /dev/vda4
UUID = xxxxxxxxxxxxx
[root@localhost ~]# xfs_admin -U xxxxxxxxxxxxxxx  /dev/vda4
...
[root@localhost ~]# mount UUID=xxxxxxxxxxxxx /data/xfs #挂载
  • tune2fs修改EXT4的label name与UUID
[root@localhost ~]# tune2fs [-l] [-L label] [-U uuid] 装置文件名

选项与参数:
-l:类似于dumpe2fs -h 的功能,将superblock内的数据读出来
-L:修改Label name
-U:修改UUID

示例:列出/dev/vda5的label name,将它改成superman_ext4
[root@localhost ~]# dumpe2fs -h /dev/vda5 |grep name
dumpe2fs 1.42.9(28-Dec-2013)
Filesystem volume name :  #没有设定label

[root@localhost ~]# tune2fs -L superman_ext4 /dev/vda5
[root@localhost ~]# dumpe2fs -h /dev/vda5 | grep name
Filesystem volume name:superman_ext4
[root@localhost ~]# mount LABEL=superman_ext4 /data/ext4

6.设定挂载

6.1 开机挂载/etc/fstab与/etc/mtab

我们直接到/etc/fstab里面修改就行,不过,系统挂载有一些限制:

  • 1.根目录/是必须挂载的,而且一定要先于其他mount point被挂载进来。

  • 2.其他mount point必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构原则(FHS)

  • 3.所有mount point在同一时间内,只能挂载一次

  • 4.所有partition在同一时间内,只能挂载一次

  • 5.如果进行卸除,必须先将工作目录移到mount point(子目录)之外

接下来看一下/etc/fstab的内容:

# Device                                            MountPoint  filesystem  parameters  dump  fsck
/dev/mapper/vg_root-lv_root                         /           ext4        defaults     1     1
UUID=fce38776-55ce-4512-8c56-4dbd7454a398           /boot       ext4        defaults     1     2
/dev/mapper/vg_root-lv_swap                         swap        swap        defaults     0     0
tmpfs                                               /dev/shm    tmpfs       defaults     0     0
devpts                                              /dev/pts    devpts      gid=5,mode=620  0  0
sysfs                                               /sys        sysfs       defaults     0     0
proc                                                /proc       proc        defaults     0     0

/etc/fstab(filesystem table)就是将我们利用mount指令进行挂载时,把所有的选项与参数写入这个文件了。

假设要将/dev/vda0每次开机都自动挂载到/dara/xfs,怎么做?
将UUID="xxx" /data/xfs xfs default 0 0 加入到上面的文件即可,如果已经被挂载了,应该先"umount /dev/vda0"

注意:开机自动挂载可参考/etc/fstab的设定,设定完毕后一定要使用"mount -a"测试语法的正确性。挂载和卸载命令后也可以是用此命令进行校验。

6.2 特殊装置loop挂载(磁盘映像不用刻录就可挂载)

当我们从网上下载.iso文件后,我们可以使用以下命令来进行挂载,而不需要刻录:

[root@root ~]#  ll   -h   /tmp/CentOS-7.0-1406-x86_64-DVD.iso
[root@root ~]#  mkdir /data/cenos_dvd
[root@root ~]#  mount  -o  loop  /tmp/CentOS-7.0-1406-x86_64-DVD.iso  /data/centos_dvd
[root@root ~]#  df  /data/centos_dvd

你可能感兴趣的:(第七章 Linux文件系统(二))