admin管理员组

文章数量:1563235

文章目录

  • 一、磁盘的分区、格式化、检验与挂载
    • 1. 观察磁盘分区状态
      • 1.1 lsblk 列出系统上的所有磁盘列表
      • 1.2. blkid 列出设备的 UUID 等参数
      • 1.3. parted 列出磁盘的分区表类型与分区信息
    • 2 磁盘分区: gdisk/fdisk
      • 2.1 gdisk
        • 2.2.1 gdisk进行分区和删除分区
      • 2.2 fdisk
    • 3. 磁盘格式化(创建文件系统)
      • 3.1 XFS 文件系统 mkfs.xfs
      • 3.2 XFS 文件系统 for RAID 性能优化 (Optional)
      • 3.3 EXT4 文件系统 mkfs.ext4
    • 4 文件系统检验
    • 5 文件系统挂载与卸载
      • 5.1 挂载 xfs/ext4/vfat 等文件系统
      • 5.2 挂载 CD 或 DVD 光盘
      • 5.3 挂载 vfat 中文U盘 (USB磁盘)
      • 5.4 重新挂载根目录与挂载不特定目录
      • 5.5 umount (将设备文件卸载)
    • lvm

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

对于一个系统管理者( root )而言,磁盘的的管理是相当重要的一环,尤其近来磁盘已经渐渐的被当成是消耗品了 … 如果我们想要在系统里面新增一颗磁盘时,应该有哪些动作需要做的呢:

  1. 对磁盘进行分区,以创建可用的 partition ;

  2. 对该 partition 进行格式化 (format),以创建系统可用的 filesystem;

  3. 若想要仔细一点,则可对刚刚创建好的 filesystem 进行检验;

  4. 在 Linux 系统上,需要创建挂载点 (亦即是目录),并将他挂载上来;

磁盘的使用必需要经过:分区、格式化与挂载,分别惯用的指令为:gdisk或fdisk, mkfs, mount三个指令 ,MBR分区表使用fdisk分区,GPT分区表使用gdisk分区

当然啰,在上述的过程当中,还有很多需要考虑的,例如磁盘分区 (partition) 需要定多大? 是否需要加入 journal 的功能?inode 与 block 的数量应该如何规划等等的问题。但是这些问题的决定, 都需要与你的主机用途来加以考虑的~所以,在这个小节里面,鸟哥仅会介绍几个动作而已, 更详细的设置值,则需要以你未来的经验来参考啰!

1. 观察磁盘分区状态

由于目前磁盘分区主要有 MBR 以及 GPT 两种格式,这两种格式所使用的分区工具不太一样!你当然可以使用本章预计最后才介绍的 parted 这个通通有支持的工具来处理,不过,我们还是比较习惯使用 fdisk 或者是 gdisk 来处理分区啊!因此,我们自然就得要去找一下目前系统有的磁盘有哪些? 这些磁盘是 MBR 还是 GPT 等等的!这样才能处理啦!

1.1 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   444K  0 rom  
vda                    252:0    0   300G  0 disk
|-vda1                 252:1    0   200M  0 part 
|-vda2                 252:2    0     1M  0 part  /boot
|-vda3                 252:4    0  19.3G  0 part
| `-centos-root        253:0    0    40G  0 lvm  /
| `-centos-swap        253:0    0    40G  0 lvm  [swap]
| `-centos-home        253:0    0    40G  0 lvm  /home

从上面的输出我们可以很清楚的看到,目前的系统主要有个 sr0 以及一个 vda 的设备,而vda 的设备下面又有三个分区, 其中 vda3 甚至还有因为 LVM 产生的文件系统!相当的完整吧!从范例一我们来谈谈默认输出的信息有哪些。

lvm技术把vda3分区挂载为三个文件系统,否则一般情况下分区和挂载点是一对一的关系

  • NAME:就是设备的文件名啰!会省略 /dev 等前导目录!

    也就是说本质上,你看到的应该是 /dev/sr0、/dev/vda、/dev/vda1等,参见 【linux命令】df和du的区别、Filesystem文件系统&&与分区关系 && Device设备。他们都是 /dev/目录下的文件,当你使用lsblk查看全部分区信息时,显示的结果会省略/dev,但你当你想看某个具体分区时,必须带上/dev ,否则会报没有此设备。

  • MAJ:MIN:其实核心认识的设备都是通过这两个代码来熟悉的!分别是主要:次要设备
    代码!

  • RM:是否为可卸载设备 (removable device),如光盘、USB 磁盘等等

  • SIZE:当然就是容量啰!

  • RO:是否为只读设备的意思

  • TYPE:是磁盘 (disk)、分区 (partition) 还是只读存储器 (rom) 等输出

  • MOUTPOINT:就是前一章谈到的挂载点!

笔者自己的环境样例:

[pict@paas-controller-3:~]$ lsblk
NAME                   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0                     11:0    1   444K  0 rom  /media/cdrom
vda                    252:0    0   300G  0 disk
|-vda1                 252:1    0   200M  0 part /boot/efi
|-vda2                 252:2    0     1M  0 part
|-vda3                 252:3    0   500M  0 part /boot
|-vda4                 252:4    0  19.3G  0 part
| `-ncl-root           253:0    0    40G  0 lvm  /
`-vda5                 252:5    0   280G  0 part
  |-ncl-root           253:0    0    40G  0 lvm  /
  |-ncl-lv_P           253:1    0 204.3G  0 lvm  /paasdata
  |-ncl-lv_Popauditlog 253:2    0     5G  0 lvm  /var/log/audit
  |-ncl-lv_P_L         253:3    0    20G  0 lvm  /paasdata/op-log
  `-ncl-lv_P_T         253:4    0    30G  0 lvm  /paasdata/op-tenant
vdb                    252:16   0   300G  0 disk /NFS_DIR/share0

范例二:仅列出 /dev/vda 设备内的所有数据的完整文件名

与范例一相比,就是指定了某个磁盘,缩写查看范围

[root@study ~]# lsblk -ip /dev/vda
NAME                   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
/dev/vda                    252:0    0   300G  0 disk
|-/dev/vda1                 252:1    0   200M  0 part 
|-/dev/vda2                 252:2    0     1M  0 part  /boot
|-/dev/vda3                 252:4    0  19.3G  0 part
| `-/dev/mapper/centos-root        253:0    0    40G  0 lvm  /
| `-/dev/mapper/centos-swap        253:0    0    40G  0 lvm  [swap]
| `-/dev/mapper/centos-home        253:0    0    40G  0 lvm  /home # 完整的文件名,由 / 开始写

注意:此时带上了前导目录/dev/

1.2. blkid 列出设备的 UUID 等参数

虽然 lsblk 已经可以使用lsblk -f 来列出文件系统与设备的 UUID 数据,不过,鸟哥还是比较习惯直接使用 blkid 来找出设备的 UUID 喔! 什么是 UUID 呢?UUID 是全域单一识别码(universally unique identifier),Linux 会将系统内所有的设备都给予一个独一无二的识别码, 这个识别码就可以拿来作为挂载或者是使用这个设备/文件系统之用了。

[root@study ~]# blkid

/dev/vda2: UUID="94ac5f77-cb8a-495e-a65b-2ef7442b837c" TYPE="xfs"

/dev/vda3: UUID="WStYq1-P93d-oShM-JNe3-KeDl-bBf6-RSmfae" TYPE="LVM2_member"

/dev/sda1: UUID="35BC-6D6B" TYPE="vfat"

/dev/mapper/centos-root: UUID="299bdc5b-de6d-486a-a0d2-375402aaab27" TYPE="xfs"

/dev/mapper/centos-swap: UUID="905dc471-6c10-4108-b376-a802edbd862d" TYPE="swap"

/dev/mapper/centos-home: UUID="29979bf1-4a28-48e0-be4a-66329bf727d9" TYPE="xfs"

如上所示,每一行代表一个文件系统,主要列出设备名称、UUID 名称以及文件系统的类型(TYPE)!这对于管理员来说,相当有帮助! 对于系统上面的文件系统观察来说,真是一目了然!

1.3. parted 列出磁盘的分区表类型与分区信息

虽然我们已经知道了系统上面的所有设备,并且通过 blkid 也知道了所有的文件系统!不过,还是不清楚磁盘的分区类型。 这时我们可以通过简单的 parted 来输出喔!我们这里仅简单的利用他的输出而已~本章最后才会详细介绍这个指令的用法的!

用来查看是mbr还是gtp分区

语法:

 parted device_name print

范例一:列出 /dev/vda 磁盘的相关数据

[root@study ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk) # 磁盘的模块名称(厂商)
Disk /dev/vda: 42.9GB                  # 磁盘的总容量
Sector size (logical/physical): 512B/512B # 磁盘的每个逻辑/物理扇区容量
Partition Table: gpt                  # 分区表的格式 (MBR/GPT)
Disk Flags: pmbr_boot
Number Start  End     Size    File system  Name Flags # 下面才是分区数据
1    1049kB   3146kB 2097kB                bios_grub

2    3146kB   1077MB 1074MB     xfs

3    1077MB   33.3GB 32.2GB                 lvm

笔者自己的环境样例:

[root@paas-controller-3:/home/pict]$ parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 322GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  211MB   210MB   fat16        efi      boot
 2      211MB   212MB   1049kB               bios     bios_grub
 3      212MB   736MB   524MB   ext4         boot
 4      736MB   21.5GB  20.7GB               root     lvm
 5      21.5GB  322GB   301GB                primary

看到上表的说明,你就知道啦!我们用的就是 GPT 的分区格式喔!这样会观察磁盘分区了吗?接下来要来操作磁盘分区了喔!

2 磁盘分区: gdisk/fdisk

接下来我们想要进行磁盘分区啰!要注意的是:“MBR 分区表请使用 fdisk 分区, GPT 分区表请使用 gdisk 分区!” 这个不要搞错~否则会分区失败的!另外,这两个工具软件的操作很类似,执行了该软件后,可以通过该软件内部的说明数据来操作, 因此不需要硬背!只要知道方法即可。刚刚从上面 parted 的输出结果,我们也知道鸟哥这个测试机使用的是 GPT 分区, 因此下面通通得要使用 gdisk 来分区才行!

2.1 gdisk

语法:
[root@study ~]# gdisk 设备名称

范例:由前一小节的 lsblk 输出,我们知道系统有个 /dev/vda,请观察该磁盘的分区与相关数据:

[root@paas-controller-3:/home/pict]$ gdisk /dev/vda '<==仔细看,不要加上数字喔!'
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.  '<==找到了 GPT 的分区表!'

Command (? for help): '<==这里可以让你输入指令动作,可以按问号 (?) 来查看可用指令'

输入?查看说明:

Command (? for help): ?

b back up GPT data to a file

c change a partition's name

d delete a partition      # 删除一个分区

i show detailed information on a partition

l list known partition types

n add a new partition     # 增加一个分区

o create a new empty GUID partition table (GPT)

p print the partition table   # 印出分区表 (常用)

q quit without saving changes # 不储存分区就直接离开 gdisk

r recovery and transformation options (experts only)

s sort partitions

t change a partition's type code

v verify disk

w write table to disk and exit   # 储存分区操作后离开 gdisk

x extra functionality (experts only)

? print this menu

你应该要通过 lsblk 或 blkid 先找到磁盘,再用 parted /dev/xxx print 来找出内部的分区表类型,之后才用 gdisk 或 fdisk 来操作系统。 上表中可以发现 gdisk 会扫描 MBR 与 GPT 分区表,不过这个软件还是单纯使用在 GPT 分区表比较好啦!

老实说,使用 gdisk 这支程序是完全不需要背指令的!如同上面的表格中,你只要按下 ? 就能够看到所有的动作! 比较重要的动作在上面已经用底线画出来了,你可以参考看看。其中比较不一样的是“q 与 w”这两个玩意儿! 不管你进行了什么动作,只要离开 gdisk 时按下“q”,那么所有的动作“都不会生效!”相反的, 按下“w”就是动作生效的意思。所以,你可以随便玩gdisk ,只要离开时按下的是“q”即可。 _! 好了,先来看看分区表信息吧!

Command (? for help): p '<== 这里可以输出目前磁盘的状态'

Disk /dev/vda: 83886080 sectors, 40.0 GiB  '# 磁盘文件名/扇区数与总容量'

Logical sector size: 512 Bytes '# 单一扇区大小为 512 Bytes'

Disk identifier (GUID): A4C3C813-62AF-4BFE-BAC9-112EBD87A483 '# 磁盘的 GPT 识别码'

Partition table holds up to 128 entries

First usable sector is 34, last usable sector is 83886046

Partitions will be aligned on 2048-sector boundaries

Total free space is 18862013 sectors (9.0 GiB)

# 分区编号 开始扇区号码  结束扇区号码    容量大小
Number    Start (sector) End (sector) 		Size 		Code Name '# 下面为完整的分区信息了!'

1      		2048 				6143 			2.0 MiB 	EF02 '# 第一个分区数据'

2 	  		6144 				2103295 		1024.0 MiB	 0700

3 	 		2103296			    65026047 		30.0 GiB	 8E00


Command (? for help): q

'# 想要不储存离开吗?按下 q 就对了!不要随便按 w 啊!'

2.2.1 gdisk进行分区和删除分区

参见 【磁盘】用 gdisk 新增分区、删除分区

2.2 fdisk

虽然 MBR 分区表在未来应该会慢慢的被淘汰,毕竟现在磁盘容量随便都大于 2T 以上了。而对于在 CentOS 7.x 中还无法完整支持 GPT 的 fdisk 来说, 这家伙真的英雄无用武之地了啦!不过依旧有些旧的系统,以及虚拟机的使用上面,还是有小磁盘存在的空间!这时处理MBR 分区表, 就得要使用 fdisk 啰!

因为 fdisk 跟 gdisk 使用的方式几乎一样!只是一个使用 ? 作为指令提示数据,一个使用 m作为提示这样而已。 此外,fdisk 有时会使用柱面 (cylinder) 作为分区的最小单位,与gdisk 默认使用 sector 不太一样!大致上只是这点差别! 另外, MBR 分区是有限制的(Primary, Extended, Logical…)!不要忘记了!鸟哥这里不使用范例了

[root@study ~]# fdisk /dev/sda

Command (m for help): m <== 输入 m 后,就会看到下面这些指令介绍

Command action

a toggle a bootable flag

b edit bsd disklabel

c toggle the dos compatibility flag

d delete a partition <==删除一个partition

l list known partition types

m print this menu

n add a new partition <==新增一个partition

o create a new empty DOS partition table

p print the partition table <==在屏幕上显示分区表

q quit without saving changes <==不储存离开fdisk程序

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)

3. 磁盘格式化(创建文件系统)

分区完毕后自然就是要进行文件系统的格式化啰!格式化的指令非常的简单,那就是“makefilesystem, mkfs” 这个指令啦!这个指令其实是个综合的指令,他会去调用正确的文件系统格式化工具软件!因为 CentOS 7 使用 xfs 作为默认文件系统, 下面我们会先介绍 mkfs.xfs ,之后介绍新一代的 EXT 家族成员 mkfs.ext4,最后再聊一聊 mkfs 这个综合指令吧!

3.1 XFS 文件系统 mkfs.xfs

我们常听到的“格式化”其实应该称为“创建文件系统 (make filesystem)”才对啦!所以使用的指令是 mkfs 喔!那我们要创建的其实是 xfs 文件系统, 因此使用的是 mkfs.xfs 这个指令才对。这个指令是这样使用的:

[root@study ~]# mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \ [-r parms] 设备名称

选项与参数:

关於单位:下面只要谈到“数值”时,没有加单位则为 Bytes 值,可以用 k,m,g,t,p (小写)等来解释比较特殊的是 s 这个单位,它指的是 sector 的“个数”喔!

-b :后面接的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k 喔!

-d :后面接的是重要的 data section 的相关参数值,主要的值有:

	agcount=数值 :设置需要几个储存群组的意思(AG),通常与 CPU 有关

	agsize=数值 :每个 AG 设置为多少容量的意思,通常 agcount/agsize 只选一个设置即可

	file :指的是“格式化的设备是个文件而不是个设备”的意思!(例如虚拟磁盘)

	size=数值 :data section 的容量,亦即你可以不将全部的设备容量用完的意思

	su=数值 :当有 RAID 时,那个 stripe 数值的意思,与下面的 sw 搭配使用

	sw=数值 :当有 RAID 时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)

	sunit=数值 :与 su 相当,不过单位使用的是“几个 sector(512Bytes大小)”的意思

	swidth=数值 :就是 su*sw 的数值,但是以“几个 sector(512Bytes大小)”来设置

-f :如果设备内已经有文件系统,则需要使用这个 -f 来强制格式化才行!

-i :与 inode 有较相关的设置,主要的设置值有:

	size=数值 :最小是 256Bytes 最大是 2k,一般保留 256 就足够使用了!

	internal=[0&#124;1]:log 设备是否为内置?默认为 1 内置,如果要用外部设备,使用下面设置

	logdev=device :log 设备为后面接的那个设备上头的意思,需设置 internal=0 才可!

	size=数值 :指定这块登录区的容量,通常最小得要有 512 个 block,大约 2M 以上才行!

-L :后面接这个文件系统的标头名称 Label name 的意思!

-r :指定 realtime section 的相关设置值,常见的有:

	extsize=数值 :就是那个重要的 extent 数值,一般不须设置,但有 RAID 时,

	最好设置与 swidth 的数值相同较佳!最小为 4K 最大为 1G 。

范例:将前一小节分区出来的 /dev/vda4 格式化为 xfs 文件系统

[root@study ~]# mkfs.xfs /dev/vda4

meta-data=/dev/vda4 isize=256 agcount=4, agsize=65536 blks

= sectsz=512 attr=2, projid32bit=1

= crc=0 finobt=0

data = bsize=4096 blocks=262144, imaxpct=25

= sunit=0 swidth=0 blks

naming =version 2 bsize=4096 ascii-ci=0 ftype=0

log =internal log bsize=4096 blocks=2560, version=2

= sectsz=512 sunit=0 blks, lazy-count=1

realtime =none extsz=4096 blocks=0, rtextents=0

很快格是化完毕!都用默认值!较重要的是 inode 与 block 的数值

通过 blkid 查看 确定创建好 xfs 文件系统了:

[root@study ~]# blkid /dev/vda4

/dev/vda4: UUID="39293f4f-627b-4dfd-a015-08340537709c" TYPE="xfs"      '这里我们能看到 设备对应的 type为 xfs'

使用默认的 xfs 文件系统参数来创建系统即可!速度非常快!

思考,为什么快?

如果我们有其他额外想要处理的项目,才需要加上一堆设置值!举例来说,因为 xfs 可以使用多个数据流来读写系统,以增加速度,因此那个 agcount 可以跟 CPU 的核心数来做搭配!举例来说,如果我的服务器仅有一颗 4 核心,但是有启动 Intel 超线程功能,则系统会仿真出 8 颗 CPU 时,那个 agcount 就可以设置为 8 喔!举个例子来瞧瞧:

略,可参考原文

3.2 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

部分省略,参见原文。。。。

3.3 EXT4 文件系统 mkfs.ext4

如果想要格式化为 ext4 的传统 Linux 文件系统的话,可以使用 mkfs.ext4 这个指令即可!这个指令的参数快速的介绍一下!

语法:
[root@study ~]# mkfs.ext4 [-b size] [-L label] 设备名称

选项与参数:

  • -b :设置 block 的大小,有 1K, 2K, 4K 的容量,

  • -L :后面接这个设备的标头名称。

范例:将 /dev/vda5 格式化为 ext4 文件系统

省略,参见原文

4 文件系统检验

5 文件系统挂载与卸载

我们在本章一开始时的挂载点的意义当中提过挂载点是目录, 而这个目录是进入磁盘分区(其实是文件系统啦!)的入口就是了。

挂载点只能是目录

不过要进行挂载前,你最好先确定几件事:

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

(2)单一目录不应该重复挂载多个文件系统;

(3)要作为挂载点的目录,理论上应该都是空目录才是。

尤其是上述的后两点!如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失。 举个例子来说,假设你的 /home 原本与根目录 (/)在同一个文件系统中,下面原本就有 /home/test 与 /home/vbird 两个目录。然后你想要加入新的磁盘,并且直接挂载 /home 下面,那么当你挂载上新的分区时,则 /home 目录显示的是新分区内的数据,至于原先的 test 与 vbird 这两个目录就会暂时的被隐藏掉了!注意喔!并不是被覆盖掉, 而是暂时的隐藏了起来,等到新分区被卸载之后,则 /home 原本的内容就会再次的跑出来啦!

而要将文件系统挂载到我们的 Linux 系统上,就要使用 mount 这个指令啦! 不过,这个指令真的是博大精深~粉难啦!我们学简单一点啊~ _


[root@localhost ~]# mount [-l]  

单纯使用 mount 命令,会显示出系统中已挂载的设备信息,使用 -l 选项,会额外显示出卷标名称(读者可自行运行,查看输出结果);

【例 1】

[root@localhost ~]# mount
#查看系统中已经挂载的文件系统,注意有虚拟文件系统
/dev/sda3 on / type ext4 (rw)  <==含义是,将 /dev/sda3 分区挂载到了 / 目录上,文件系统是 ext4,具有读写权限
proc on /proc type proc (rw)
sysfe on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw, gid=5, mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fe/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfe/rpc_pipefs type rpc_pipefs (rw)

[root@localhost ~]# mount -a

-a 选项的含义是auto,自动检查 /etc/fstab 文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。

这里简单介绍一下 /etc/fstab 文件,此文件是自动挂载文件,系统开机时会主动读取 /etc/fstab 这个文件中的内容,根据该文件的配置,系统会自动挂载指定设备。有关自动挂载(修改此文件)的具体介绍,会在后续文章中讲解。


[root@localhost ~]# mount [-t 系统类型] [-L 卷标名] [-o 特殊选项] [-n] 设备文件名 挂载点

各选项的含义分别是:

  • -t 系统类型:指定欲挂载的文件系统类型。Linux 常见的支持类型有 EXT2、EXT3、EXT4、iso9660(光盘格式)、vfat、reiserfs 等。如果不指定具体类型,挂载时 Linux 会自动检测。

    基本上,CentOS 7 已经太聪明了,因此你不需要加上 -t 这个选项,系统会自动的分析最恰当的文件系统来尝试挂载你需要的设备! 这也是使用 blkid 就能够显示正确的文件系统的缘故!那 CentOS 是怎么找出文件系统类型的呢? 由于文件系统几乎都有 superblock ,我们的Linux 可以通过分析 superblock 搭配 Linux 自己的驱动程序去测试挂载, 如果成功的套和了,就立刻自动的使用该类型的文件系统挂载起来啊!那么系统有没有指定哪些类型的filesystem 才需要进行上述的挂载测试呢? 主要是参考下面这两个文件:

    • (1)/etc/filesystems:系统指定的测试挂载文件系统类型的优先顺序;

    • (2)/proc/filesystems:Linux系统已经载入的文件系统类型。

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

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

    例如 ext4 的驱动程序就写在“/lib/modules/$(uname -r)/kernel/fs/ext4/”这个目录下啦!

  • -L 卷标名:除了使用设备文件名(例如 /dev/hdc6)之外,还可以利用文件系统的卷标名称进行挂载。

  • -n:在默认情况下,系统会将实际挂载的情况实时写入 /etc/mtab 文件中,但在某些场景下(例如单人维护模式),为了避免出现问题,会刻意不写入,此时就需要使用这个选项;

  • -o 特殊选项:可以指定挂载的额外选项,比如读写权限、同步/异步等,如果不指定,则使用默认值(defaults)。具体的特殊选项参见表 1;

    选项功能
    rw/ro是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。
    async/sync此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。
    dev/nodev是否允许从该文件系统的 block 文件中提取数据,为了保证数据安装,默认是 nodev。
    auto/noauto是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。
    suid/nosuid设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。
    exec/noexec设定在文件系统中是否允许执行可执行文件,默认是允许。
    user/nouser设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以。
    defaults定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项。
    remount重新挂载已挂载的文件系统,一般用于指定修改特殊权限。

另外, 过去我们都习惯使用设备文件名然后直接用该文件名挂载, 不过近期以来鸟哥比较建议使用 UUID 来识别文件系统,会比设备名称与标头名称还要更可靠!因为是独一无二的啊!
[root@study ~]# mount[-t 系统类型] [-L 卷标名] [-o 特殊选项] [-n] UUID='' 挂载点

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

范例:找出 /dev/vda4 的 UUID 后,用该 UUID 来挂载文件系统到 /data/xfs 内

[root@study ~]# blkid /dev/vda4

/dev/vda4: UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" TYPE="xfs"

[root@study ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs

mount: mount point /data/xfs does not exist '# 非正规目录!目录尚不存在,所以先要手动创建它!'

[root@study ~]# mkdir -p /data/xfs

[root@study ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs     '再次执行挂载命令'

[root@study ~]# df /data/xfs

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/vda4 1038336 32864 1005472 4% /data/xfs

'# 顺利挂载,且容量约为 1G 左右没问题!'

范例:使用相同的方式,将 /dev/vda5 挂载于 /data/ext4

[root@study ~]# blkid /dev/vda5

/dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4"

[root@study ~]# mkdir /data/ext4

[root@study ~]# mount UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" /data/ext4

[root@study ~]# df /data/ext4

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/vda5 999320 2564 927944 1% /data/ext4

5.2 挂载 CD 或 DVD 光盘

请拿出你的 CentOS 7 原版光盘出来,然后放入到光驱当中,我们来测试一下这个玩意儿啰!

范例:将你用来安装 Linux 的 CentOS 原版光盘拿出来挂载到 /data/cdrom!

[root@study ~]# blkid

.....(前面省略).....

/dev/sr0: UUID="2015-04-01-00-21-36-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"

[root@study ~]# mkdir /data/cdrom

[root@study ~]# mount /dev/sr0 /data/cdrom

mount: /dev/sr0 is write-protected, mounting read-only

[root@study ~]# df /data/cdrom

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sr0 7413478 7413478 0 100% /data/cdrom

'# 怎么会使用掉 100% 呢?是啊!因为是 DVD 啊!所以无法再写入了啊!'

光驱一挂载之后就无法退出光盘片了!除非你将他卸载才能够退出! 从上面的数据你也可以发现,因为是光盘嘛!所以磁盘使用率达到 100% ,因为你无法直接写入任何数据到光盘当中! 此外,如果你使用的是图形界面,那么系统会自动的帮你挂载这个光盘到 /media/ 里面去喔!也可以不卸载就直接退出! 但是文字界面没有这个福利就是了! _

Tips 话说当时年纪小 (其实是刚接触 Linux 的那一年, 1999 年前后),摸 Linux 到处碰壁!连将 CDROM 挂载后, 光驱竟然都不让我退片!那个时候难过的要死!还用回纹针插入光驱让光盘退片耶!不过如此一来光盘就无法被使用了! 若要再次使用光驱,当时的解决的方法竟然是“重新开机!”囧的可以啊!

5.3 挂载 vfat 中文U盘 (USB磁盘)

请拿出你的U盘并插入 Linux 主机的 USB接口中!注意,你的这个U盘不能够是 NTFS 的文件系统喔!接下来让我们测试测试吧!

范例:找出你的U盘设备的 UUID,并挂载到 /data/usb 目录中

[root@study ~]# blkid

/dev/sda1: UUID="35BC-6D6B" TYPE="vfat"

[root@study ~]# mkdir /data/usb

[root@study ~]# mount -o codepage=950,iocharset=utf8 UUID="35BC-6D6B" /data/usb

[root@study ~]# # mount -o codepage=950,iocharset=big5 UUID="35BC-6D6B" /data/usb

[root@study ~]# df /data/usb

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda1 2092344 4 2092340 1% /data/usb

如果带有中文文件名的数据,那么可以在挂载时指定一下挂载文件系统所使用的语系数据。在 man mount 找到 vfat 文件格式当中可以使用 codepage 来处理!中文语系的代码为 950喔!另外,如果想要指定中文是万国码还是大五码, 就得要使用 iocharset 为 utf8 还是 big5两者择一了!因为鸟哥的U盘使用 utf8 编码,因此将上述的 big5 前面加上 # 符号, 代表注解该行的意思啰!

万一你使用的 USB 磁盘被格式化为 NTFS 时,那可能就得要动点手脚,因为默认的 CentOS7 并没有支持 NTFS 文件系统格式! 所以你得要安装 NTFS 文件系统的驱动程序后,才有办法处理的!这部份我们留待 22 章讲到 yum 服务器时再来谈吧! 因为目前我们也还没有网络、也没有讲软件安装啊! _

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

整个目录树最重要的地方就是根目录了,所以根目录根本就不能够被卸载的!问题是,如果你的挂载参数要改变, 或者是根目录出现“只读”状态时,如何重新挂载呢?最可能的处理方式就是重新开机 (reboot)! 不过你也可以这样做:

范例:将 / 重新挂载,并加入参数为 rw 与 auto

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

重点是那个“ -o remount,xx ”的选项与参数!请注意,要重新挂载 (remount) 时, 这是个非常重要的机制!尤其是当你进入单人维护模式时,你的根目录常会被系统挂载为只读,这个时候这个指令就太重要了!

另外,我们也可以利用 mount 来将某个目录挂载到另外一个目录去喔!这并不是挂载文件系统,而是额外挂载某个目录的方法! 虽然下面的方法也可以使用 symbolic link 来链接,不过在某些不支持符号链接的程序运行中,还是得要通过这样的方法才行。

范例:将 /var 这个目录暂时挂载到 /data/var 下面:

[root@study ~]$ mkdir /data/var     '新建/data/var'

[root@study ~]$ mount --bind /var /data/var    '执行mount命令'

[root@study ~]$ ls -lid /var /data/var   '查看2个目录'

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@study ~]$ mount | grep var     '查看所有的带var的挂载信息'
/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
'只查看到一条挂载信息'

看起来,其实两者链接到同一个 inode 嘛! _ 没错啦!通过这个 mount --bind 的功能, 您可以将某个目录挂载到其他目录去喔!而并不是整块 filesystem 的啦!所以从此进入/data/var 就是进入 /var 的意思喔

5.5 umount (将设备文件卸载)

语法:

[root@study ~]# umount [-fn] 设备文件名或挂载点

选项与参数:

-f :强制卸载!可用在类似网络文件系统 (NFS) 无法读取到的情况下;

-l :立刻卸载文件系统,比 -f 还强!

-n :不更新 /etc/mtab 情况下卸载。

就是直接将已挂载的文件系统给他卸载即是!卸载之后,可以使用 df 或 mount 看看是否还存在目录树中? 卸载的方式,可以下达设备文件名或挂载点,均可接受啦!下面的范例做看看吧!

范例:将本章之前自行挂载的文件系统全部卸载:

[root@study ~]$ 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@study ~]$ umount /dev/vda4 '<==用设备文件名来卸载'

[root@study ~]$ umount /data/ext4 '<==用挂载点来卸载'

[root@study ~]$ umount /data/cdrom  '<==因为挂载点比较好记忆!'

[root@study ~]$ umount /data/usb

[root@study ~]$ umount /data/var '<==一定要用挂载点!因为设备有被其他方式挂载'

由于通通卸载了,此时你才可以退出光盘片、软盘片、U盘等设备喔!如果你遇到这样的情况:

[root@study ~]# mount /dev/sr0 /data/cdrom

[root@study ~]# cd /data/cdrom

[root@study cdrom]$ umount /data/cdrom  'unmount,提示忙'

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@study cdrom]$ cd /     '退出当前目录后,才可以成功执行'

[root@study /]# umount /data/cdrom

由于你目前正在 /data/cdrom/ 的目录内,也就是说其实“你正在使用该文件系统”的意思!所以自然无法卸载这个设备!那该如何是好?就“离开该文件系统的挂载点”即可。以上述的案例来说, 你可以使用“ cd / ”回到根目录,就能够卸载 /data/cdrom 啰!简单吧!

lvm

参见 磁盘管理LVM详解及LVM常用命令


参考:
《Linux学习笔记16——磁盘的分区、格式化、检验与挂载

本文标签: 分区磁盘学习笔记命令格式