Linux磁盘和分区管理

一,磁盘和分区简介

1,磁盘的结构和工作原理

在 Linux 系统中,文件系统是创建在硬盘上的,因此,要想彻底搞清楚文件系统的管理机制,就要从了解硬盘开始。硬盘可分为机械硬盘(Hard Disk Drive, HDD)和固态硬盘(Solid State Disk, SSD),机械硬盘采用磁性碟片来存储数据,而固态硬盘通过闪存颗粒来存储数据。

机械硬盘主要由磁盘、磁道、扇区、磁头、柱面与传动轴等组成。

  • 磁盘:磁盘一般有一个或多个盘片。每个盘片可以有两面,即第一个盘片的正面为0面,反面为 1 面;第二个盘片的正面为 2 面…依次类推。
  • 磁道:每个盘片的盘面被划分成多个狭窄的同心圆环,数据就存储在这样的同心圆环上面,我们将这样的圆环称为磁道 (Track)。每个盘面可以划分多个磁道,最外圈的磁道是0号磁道,向圆心增长依次为1磁道、2磁道…磁盘的数据存放就是从最外圈开始的。
  • 扇区:根据硬盘的规格不同,磁道数可以从几百到成千上万不等。每个磁道可以存储数 Kb 的数据,但是计算机不必要每次都读写这么多数据。因此,再把每个磁道划分为若干个弧段,每个弧段就是一个扇区 (Sector),现在每个扇区可存储 512 字节数据已经成了业界的约定。也就是说,即使计算机只需要某一个字节的数据,但是也得把这个 512 个字节的数据全部读入内存,再选择所需要的那个字节。
  • 磁头:是硬盘读取数据的关键部件,它的主要作用就是将存储在硬盘盘片上的磁信息转化为电信号向外传输,而它的工作原理则是利用特殊材料的电阻值会随着磁场变化的原理来读写磁盘上的数据,磁头的好坏在很大程度上决定着硬盘盘片的存储密度。比较常用的是GMR(Giant Magneto Resistive)巨磁阻磁头。

硬盘读写数据的过程  

  现代硬盘寻道都是采用CHS(Cylinder Head Sector)的方式,硬盘读取数据时,读写磁头沿径向移动,移到要读取的扇区所在磁道的上方,这段时间称为寻道时间(seek time)。因读写磁头的起始位置与目标位置之间的距离不同,寻道时间也不同。目前硬盘一般为2到30毫秒,平均约为9毫秒。磁头到达指定磁道后,然后通过盘片的旋转,使得要读取的扇区转到读写磁头的下方,这段时间称为旋转延迟时间(rotational latencytime)一个7200(转/每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋转半圈)。平均寻道时间和平均选装延迟称为平均存取时间。

磁盘接口

目前,常见的机械硬盘接口有以下几种:

  • IDE 硬盘接口:(Integrated Drive Eectronics,并口,即电子集成驱动器)也称作 "ATA硬盘" 或 "PATA硬盘",是早期机械硬盘的主要接口,ATA133 硬盘的理论速度可以达到 133MB/s(此速度为理论平均值)因为并口线的抗干扰性太差,且排线占用空间较大,不利计算机内部散热,已逐渐被SATA所取代。
  • SATA接口:全称Serial ATA,也就是使用串口的ATA接口,特点是抗干扰性强,对数据线的要求比ATA低很多,且支持热插拔等功能。SATA-II的接口速度为300MiB/s,而新的SATA-III标准可达到600MiB/s的传输速度。SATA的数据线也比ATA的细得多,有利于机箱内的空气流通,整理线材也比较方便。
  • SCSI接口:全称Small Computer System Interface(小型机系统接口),经历多代的发展,从早期的SCSI-II,到当前的Ultra320 SCSI以及Fiber-Channel(光纤通道),接口型式也多种多样。SCSI硬盘广为工作站级个人计算机以及服务器所使用,因此会使用较为先进的技术,如碟片转速15000rpm的高转速,且资料传输时CPU占用率较低,但是单价也比相同容量的ATA及SATA硬盘更加昂贵。
  • SAS接口:全称Serial Attached SCSI,是新一代的SCSI技术,可兼容SATA硬盘,都是采取序列式技术以获得更高的传输速度,可达到12Gb/s。此外也透过缩小连接线改善系统内部空间等。
  • FC接口:全称Fibre Channel(光纤通道接口),拥有此接口的硬盘在使用光纤联接时具有热插拔性、高速带宽(4Gb/s或10Gb/s)、远程连接等特点;内部传输速率也比普通硬盘更高。但其价格高昂,因此FC接口通常只用于高端服务器领域

现在,普通机械盘接口多为SATA,固态盘接口多为SAS

2,Linux磁盘分区

Linux和现代大多数操作系统相同,把磁盘分割为多个分区,每个分区实际被当作一个独立的磁盘,创建分区的过程叫做磁盘分区。

Linux通过不同的设备节点来区分各个分区,节点名称由磁盘名和分区号组成。例如,驱动器/dev/hda的第一个分区就叫做/dev/hda1,驱动器/dev/hdb的第六个分区就叫做/dev/hdb6。

不同的操作系统有固定的记录磁盘分区的方式。最常见的分区方案是DOS分区。传统的Linux分区方案与DOS分区方案类似。

(1)主引导记录

每个磁盘的头部分(512字节)为主引导记录(MBR,Master Boot Record)MBR包含以下内容

引导程序(Bootloader):在可引导磁盘的MBR中存放一个可执行文件,叫做引导程序。在引导时,BIOS将控制权交给引导程序,并由引导程序负责装载然后将控制转交给合适的操作系统。

分区表(Partition Table) :在每个磁盘上,主引导记录的64字节被保留在分区表。这个分区表最多记录4个分区的信息,这4个分区叫做主分区(Primary Partition)。分区表会记录每个分区的开始位置、结束位置和分区类型。

(2)主分区

每个磁盘最多可以分为4个主分区,其属性记录在MBR的分区表中。习惯上Linux将主分区编号为1~4.主分区的编号可以手动指定,也就是说,用户看到一个分区的编号为3,并不意味着前面已经有两个主分区了。

(3)扩展分区

为了方便用户有更多的分区可以使用,DOS分区允许将扩展分区(Extended Partition)建在任何一个主分区上。扩展分区可以划分成更多的逻辑分区(Logical Partition)。主分区一旦用作扩展分区,就不能再用作其他分区了。

扩展分区可有可无,如果觉得4个分区够用,就无须建立扩展分区。若有必要,一般会选择前三个分区作为主分区,剩下的第四个分区作为扩展分区。

(4)逻辑分区

在扩展分区里可以建立多个逻辑分区,IDE硬盘逻辑分区不能多于63个,SCSI硬盘不能多于15个。Linux总是把第一个逻辑分区从5开始编号,无论前面有几个主分区。

3,Linux常见设备命名

在Linux中,一切设备都是文件,硬件也不例外。既然是文件,就必然有文件名称。系统内核中的udev设备管理器会自动规范硬件名称,让用户可以通过设备文件的名称知道设备的大致属性和分区信息等,这对陌生的设备来说非常方便。

硬件设备 文件名称
IDE设备 /dev/hd[a-d]
SCSI/SATA/U盘 /dev/sd[a-p]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom或者/dev/sr0

4,Linux分区命名

Windows使用C\D\E等来命名分区,而Linux使用“设备名称+分区编号”标识硬盘的各个分区,主分区或扩展分区的编码为1~4,逻辑分区的编码从5开始。这样的命名方式显得更加清晰,可以避免增加或者卸载硬盘造成的盘符混乱。

IDE硬盘和光驱设备将由内部连接来区分。第一个IDE信道的主(master)设备标识为/dev/hda,第一个给IDE信道的从(slave)设备标识为/dev/hdb。按照这个原则,第二个IDE信道的主、从设备用/dev/hdc和/dev/hdd来标识。

二,Linux文件系统概述

Linux最有特色的就是Linux文件系统,它从不同的操作系统中吸收了很多特性,一直在快速演变。Linux的发行版可以支持种类丰富的基于磁盘的文件系统,如SGI的XFS,常见的EXT3,EXT4,较老的ReiserFS,以及IBM的JFS等。Linux还支持许多外来的文件系统,比如,在windows上使用的FAT和NTFS,以及在CD-ROM上使用的ISO-9660文件系统。

  • FAT
    在Win 9X下,FAT16支持的分区最大为2GB。我们知道计算机将信息保存在硬盘上称为“簇”的区域内。使用的簇越小,保存信息的效率就越高。在FAT16的情况下,分区越大簇就相应的要大,存储效率就越低,势必造成存储空间的浪费。并且随着计算机硬件和应用的不断提高,FAT16文件系统已不能很好地适应系统的要求。在这种情况下,推出了增强的文件系统FAT32。
  • NTFS
    NTFS文件系统是一个基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。使用非常广泛的Windows NT 4.0采用的就是NTFS 4.0文件系统,相信它所带来的强大的系统安全性一定给广大用户留下了深刻的印象。Win 2000采用了更新版本的NTFS文件系统NTFS 5.0,它的推出使得用户不但可以像Win 9X那样方便快捷地操作和管理计算机,同时也可享受到NTFS所带来的系统安全性。
  • exFAT
    全称Extended File Allocation Table File System,扩展FAT,即扩展文件分配表,是Microsoft在Windows Embeded 5.0以上(包括Windows CE 5.0、6.0、Windows Mobile5、6、6.1)中引入的一种适合于闪存的文件系统,为了解决FAT32等不支持4G及其更大的文件而推出。
  • RAW
    RAW文件系统是一种磁盘未经处理或者未经格式化产生的文件系统,一般来说有这几种可能造成正常文件系统变成RAW文件系统:没有格式化、格式化中途取消操作、硬盘出现坏道、硬盘出现不可预知的错误、毒所致。解决RAW文件系统的最快的方法是立即格式化,并且使用杀毒软件全盘杀毒
  • Ext
    Ext2:Ext是GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。
    Ext3:是一种日志式文件系统,是对ext2系统的扩展,它兼容ext2。日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机
    Ext4:Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能。
  • XFS
  • 是一种高性能的日志文件系统,而且是 RHEL 7 中默认的文件管理系统,它的 优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的 日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为 18EB, 这几乎满足了所有需求。
  • HFS
    分层文件系统(Hierarchical File System,HFS)是一种由苹果电脑开发,并使用在Mac OS上的文件系统。最初被设计用于软盘和硬盘,同时也可以在在只读媒体如CD-ROM上见到。

三,使用fdisk分区

在Linux下,最常用的分区工具是fdisk,这个工具简单高效,可以在最基本的环境下使用。只有root用户才可以使用fdisk命令。

1,查看硬盘及分区信息

fdisk -l

fdisk分区的各列及其功能如下

功能
Device 该分区的设备节点,也作为名称使用
Boot 代表可引导分区
Start End 分区开始和结束的柱面
Blocks 以大小为1024字节(1kb)的块作为计算单位的分区大小
Id 一个两位的十六进制数,代表分区类型(用途)
System Id定义的分区类型的文本名称

常见的Linux分区类型

Id 标签 标签说明
b Win95 FAT32 FAT32文件系统
7 HPFS/NTFS HPFS或NTFS文件系统
5 Extended 扩展分区
83 Linux Linux EXT2、EXT3、EXT4、XFS文件系统
82 Linux SWAP Linux交换空间
fd Linux raid auto Linux软件RAID分区
8e Linux LVM Linux逻辑卷管理物理卷

2,使用fdisk编辑分区表

fdisk的主要功能是修改分区表,fdisk命令后面跟的是设备,设备后面不加数字

[root@bigdata ~]# 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.


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 # 更改分区类型Id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit # 写入并退出
   x   extra functionality (experts only)

Command (m for help): 

3,添加新分区

当确认磁盘还有未使用的空间时,可以添加新的分区。添加磁盘分区的顺序一般是先创建主分区(Primary Partition),再创建扩展分区(Extended Partition),最后创建逻辑分区(Logical Partition)。

在使用fdisk命令时,系统会根据目前的分区情况,提示可以创建的分区类型,fdisk使用p代表主分区,e代表扩展分区,l代表逻辑分区

如果添加的是主分区或扩展分区,则输入1~4这4个数字中的一个(必须输入未被使用的数字,可以不按顺序),如果添加的是逻辑分区,则编号自动从5开始

(1)添加主分区

添加一个10G大小的主分区,编号为1(因为已经创建过了,这里再创建一个10G的主分区,编号为2)

[root@bigdata ~]# fdisk /dev/sdb  (fdisk + 磁盘号)
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.


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)

Command (m for help): n # 添加分区
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p # 选择主分区
Partition number (2-4, default 2): 2 # 分区号按默认的走,因为已经有1了,接下来是2
First sector (20973568-41943039, default 20973568): # 起始柱面号,使用默认,直接回车
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-41943039, default 41943039): +5G # 分区容量设置5G 使用“+大小单位”(KB、MB、GB)
Partition 2 of type Linux and of size 5 GiB is set

Command (m for help): 

(2)添加扩展分区

创建编号为4的扩展分区,将剩余空间全部分配给扩展分区,在起始柱面和结束柱面中全部选择默认,按Enter键即可

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)

Command (m for help): n # 创建新分区
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): e # 选择扩展分区
Partition number (3,4, default 3): 4
First sector (31459328-41943039, default 31459328): 
Using default value 31459328
Last sector, +sectors or +size{K,M,G} (31459328-41943039, default 41943039): 
Using default value 41943039
Partition 4 of type Extended and of size 5 GiB is set

Command (m for help): 

(3)添加逻辑分区

在扩展分区上创建一个2G大小的逻辑分区,逻辑分区无须指定编号

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)

Command (m for help): n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (31461376-41943039, default 31461376): 
Using default value 31461376
Last sector, +sectors or +size{K,M,G} (31461376-41943039, default 41943039): +2G
Partition 5 of type Linux and of size 2 GiB is set

Command (m for help): 

(4)查看分区表

在全部分区完成后,可以使用p命令查看分区表,同时在分区完成后,记得输入“w”将新的分区表写入磁盘,否则新的分区表不起任何作用。

[root@bigdata ~]# fdisk -l

Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 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: 0x000a2dc0

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

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0x9d40606b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    31459327     5242880   83  Linux
/dev/sdb4        31459328    41943039     5241856    5  Extended
/dev/sdb5        31461376    35655679     2097152   83  Linux

Disk /dev/mapper/centos-root: 18.2 GB, 18249416704 bytes, 35643392 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 /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 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

[root@bigdata ~]# 

(5)删除分区

使用d命令,然后输入需要删除的分区编号即可删除该分区,注意不能直接删除扩展分区,只有将逻辑分区全部删除后才可删除扩展分区。

[root@bigdata ~]# fdisk /dev/sdb
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.


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)

Command (m for help): d
Partition number (1,2,4,5, default 5): 2
Partition 2 is deleted

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@bigdata ~]# 

再查一下分区列表,删除的已经不见了

[root@bigdata ~]# fdisk -l

Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 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: 0x000a2dc0

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

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0x9d40606b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb4        31459328    41943039     5241856    5  Extended
/dev/sdb5        31461376    35655679     2097152   83  Linux

Disk /dev/mapper/centos-root: 18.2 GB, 18249416704 bytes, 35643392 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 /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 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

[root@bigdata ~]# 

四,文件系统管理

在分区完成后,硬盘仍然无法使用,需要格式化之后才能使用。格式化就是在指定的磁盘创建文件系统。

1,创建文件系统

创建文件系统使用mkfs命令,在终端输入mkfs后,按两次Tab键,执行结果如下

[root@bigdata ~]# mkfs
mkfs         mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.minix   mkfs.xfs  

mkfs命令把常用的文件系统用后缀的方式保存成多个命令文件,使用起来非常简单,格式如下

mkfs [-t 文件系统类型] [选项] 分区名称

在/dev/sdb1上创建XFS文件系统,命令如下(示例)

mkfs.xfs /dev/sdb1

在dev/sdb1上创建EXT4文件系统,命令如下(实践)

[root@bigdata ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@bigdata ~]# 

2,挂载与卸载

在完成分区和格式化操作后,就需要挂载并使用设备了,这个操作过程非常简单,首先创建一个目录作为挂载点,然后使用mount命令将存储设备与挂载点进行关联。当挂载的磁盘不再使用时,若要恢复挂载点目录的原有功能,则可以使用umount命令卸载设备。

(1)挂载设备

使用mount命令,在挂载前必须确认挂载点目录存在,并且挂载点目录目前没有被使用,在挂载后目录内原来的文件会隐藏,mount命令格式如下

mount [选项] 设备 挂载点

常用选项说明

  • -t type 指定文件系统的类型,通常不必指定,mount会自动选择正确的类型
  • -a 挂载fstab文件中所有的文件系统
  • -r 以只读方式挂载
  • -o options 主要用来描述设备或档案的挂载方式

常用参数说明如下

  • loop 用来把一个文件当成硬盘分区挂载到系统上
  • ro 采用只读方式挂载设备
  • rw 采用读写方式挂载设备

注:loop设备是一种伪设备,或者说是仿真设备,它能使用户像块设备一样访问一个文件。挂载就是将一个loop设备和一个文件进行连接,给用户提供一个类块设备文件的接口。

# 将光盘挂载到/mnt挂载点
mount -o loop,ro -t iso9660 /dev/sr0 /mnt
# 将U盘挂载到/mnt/usb挂载点,U盘为FAT32格式
mount -t vfat /dev/sdc1 /mnt/usb

创建一个挂载点,并将设备挂载到挂载点

mkdir /test
[root@bigdata ~]# df -hl
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  1.1G   16G   6% /
devtmpfs                 3.6G     0  3.6G   0% /dev
tmpfs                    3.6G     0  3.6G   0% /dev/shm
tmpfs                    3.6G   12M  3.6G   1% /run
tmpfs                    3.6G     0  3.6G   0% /sys/fs/cgroup
/dev/sda1               1014M  146M  869M  15% /boot
tmpfs                    727M     0  727M   0% /run/user/0
[root@bigdata ~]# mount /dev/sdb1 /test
[root@bigdata ~]# df -hl
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  1.1G   16G   6% /
devtmpfs                 3.6G     0  3.6G   0% /dev
tmpfs                    3.6G     0  3.6G   0% /dev/shm
tmpfs                    3.6G   12M  3.6G   1% /run
tmpfs                    3.6G     0  3.6G   0% /sys/fs/cgroup
/dev/sda1               1014M  146M  869M  15% /boot
tmpfs                    727M     0  727M   0% /run/user/0
/dev/sdb1                9.8G   37M  9.2G   1% /test

(2)卸载设备

卸载设备使用umount命令,在卸载前必须确认磁盘不再使用,umount命令格式如下

umount [选项] [文件系统]

常用选项及参数说明如下

  • -a 卸载/etc/mtab中记录的所有文件系统
  • -n 在卸载时不将信息存入/etc/mtab文件中
  • -r 若无法成功卸载,则尝试以只读的方式重新挂载文件系统
  • -v 在执行时显示详细的步骤
  • [文件系统] 除了直接指定文件系统,也可以使用设备名称或挂载点来表示文件系统

把前面挂载的/test的挂载点卸载掉

[root@bigdata ~]# df -hl
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  1.1G   16G   6% /
devtmpfs                 3.6G     0  3.6G   0% /dev
tmpfs                    3.6G     0  3.6G   0% /dev/shm
tmpfs                    3.6G   12M  3.6G   1% /run
tmpfs                    3.6G     0  3.6G   0% /sys/fs/cgroup
/dev/sda1               1014M  146M  869M  15% /boot
tmpfs                    727M     0  727M   0% /run/user/0
/dev/sdb1                9.8G   37M  9.2G   1% /test
[root@bigdata ~]# umount -v /dev/sdb1
umount: /test (/dev/sdb1) unmounted

(3)设置自动挂载

使用mount命令挂载的文件系统,当计算机重启或者关机再开时仍然需要再次挂载才可使用,如果希望文件系统在计算机重启时自动挂载,则可以通过修改/etc/fstab文件来实现。

在/etc/fstab文件中,每行从左向右有六个由空格隔开的字段,每行描述了一个文件系统

[root@bigdata ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Sep  8 21:46:59 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4762d1bc-1779-43ce-af37-fa3725b99c85 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

/etc/fstab文件的各字段说明

字段 示例 说明
1 /dev/sda2 要挂载的设备(分区号)
2 /home 文件系统的挂载点
3 xfs 所挂载文件系统的类型,可使用auto让系统自动检测
4 defaults 文件系统的挂载选项,用逗号隔开,例如:async(异步写入),dev(允许建立设备文件),auto(自动载入),rw(读写权限),exec(可执行),nouser(普通用户不可mount),suid(允许含有suid文件格式),defaults表示同时具备以上参数,所以使用默认defaults。另外,还包括usrquota(用户配额),grpquota(组配额)
5 0 提供dump功能来备份洗头工,0表示不使用dump,1表示使用dump,2也表示使用dump但重要性比1小
6 0 指定计算机启动时文件系统的fsck(文件系统检查)次序,0表示不检查,1表示最先检查,2表示检查但操作比1迟

例如,在以后系统每次运行时,将上述/dev/sdb1分区自动以defaults方式挂载到/test挂载点,可以在/etc/fstab文件的末行添加如下内容

cat >>/etc/fstab
/dev/sdb1  /test  xfs  defaults 0  0
[Ctrl+D]

在系统重启后,会发现/dev/sdb1分区已经自动挂载,mount -a 命令会逐行读取/etc/fstab文件,并挂载所有该文件内的分区设备,同时mount -a 命令在系统启动时会自动执行。

注:Linux下还有一个/etc/mtab文件,用来记录当前系统的挂载信息,每次系统执行mount和umount命令都会更新/etc/mtab文件的内容,读者可自行验证。

posted @ 2022-09-09 17:22  你樊不樊  阅读(213)  评论(0编辑  收藏  举报