1、磁盘分区

在Linux中,磁盘是通过分区来使用的。分区是将一个硬盘划分成几个逻辑部分来使用,在每个分区中可以存储不同的文件系统。因此,在挂载磁盘之前,我们需要先对磁盘进行分区。磁盘分区的过程可以通过命令行工具或图形界面工具来完成。

常用的磁盘分区工具有:

  • cfdisk:命令行工具,适用于创建主分区和扩展分区,支持MBR和GPT分区表。
  • fdisk:命令行工具,适用于创建主分区和扩展分区,支持MBR分区表。
  • gdisk:命令行工具,适用于创建主分区、扩展分区和逻辑分区,支持GPT分区表。
  • gparted:图形界面工具,适用于创建主分区、扩展分区和逻辑分区,支持MBR和GPT分区表。

分区的目的是将一个硬盘划分成多个逻辑部分,每个部分可以单独使用和管理。当然,分区并不是必需的,我们也可以直接将整个硬盘作为一个单一的分区进行挂载。

2、文件系统

在Linux中,文件系统是挂载磁盘的重要概念。文件系统是指一种组织数据的方式,可以帮助我们在磁盘上存储和管理文件。常见的Linux文件系统有ext2、ext3、ext4、XFS等。

在挂载磁盘之前,我们需要先在磁盘上创建文件系统。创建文件系统的命令为mkfs。

例如,若要创建一个ext4文件系统,只需要运行以下命令:

mkfs.xfs /dev/sdb1

其中"/dev/sdb1"表示要创建文件系统的分区。

3、挂载磁盘

在Linux中,挂载磁盘的命令为mount。在挂载磁盘之前,我们需要保证文件系统已经被创建,同时需要知道要挂载的设备和挂载点。

设备指的是要挂载的物理磁盘或分区,它的标识通常以/dev开头,后面跟着分区信息(如/dev/sda1)。

挂载点指的是要将设备挂载到哪个目录下,这个目录称为挂载点。挂载点通常是一个空目录,它必须存在于文件系统中才能被用作挂载点。

例如,我们要将一个ext4文件系统挂载到/mnt/data这个目录下,只需要运行以下命令:

mount /dev/sdb1 /mnt/data

这里"/dev/sdb1"是要挂载的设备,"/mnt/data"是挂载点。

4、开机自动挂载

在Linux中,如果要让磁盘在每次开机后自动挂载到指定的目录下,我们需要将挂载信息写入/etc/fstab文件中。

/etc/fstab是Linux系统中用于存储文件系统挂载信息的文件。它包含了系统启动时需要挂载的所有文件系统的信息,以及挂载时使用的选项。

我们需要在/etc/fstab文件中添加一个新的行来描述我们要挂载的文件系统。每一行包含了如下信息:

  • 设备:要挂载的设备名称,例如/dev/sdb1。
  • 挂载点:要将设备挂载到哪个目录下。
  • 文件系统类型:要挂载的文件系统类型,例如xfs。
  • 挂载选项:用于控制挂载行为的选项,例如noatime(不更新访问时间)和defaults(使用默认选项)等。
  • 挂载次序:系统应该以什么顺序挂载文件系统,例如0表示最先挂载。

例如,我们要将设备/dev/sdb1挂载到/mnt/data目录下,并使用ext4文件系统类型,同时在挂载时使用默认选项和noatime选项。我们需要在/etc/fstab文件中添加以下行:

/dev/sdb1 /mnt/data xfs defaults,noatime 0 0

这样,在每次开机后,系统会自动挂载/dev/sdb1到/mnt/data目录下,并应用我们指定的挂载选项

5、卸载磁盘

在Linux中,卸载磁盘的命令为umount。卸载磁盘之前,需要先检查磁盘上是否有进程在使用它。如果有,则需要先终止相应的进程,才能安全地卸载磁盘。

例如,若要卸载/mnt/data目录下的文件系统,只需要运行以下命令:

umount /mnt/data

6、fdisk操作指令

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

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

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 (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): #默认是P创建主分区可以不填写,可直接回车
Using default response p
Partition number (1-4, default 1):   #默认分区1,可直接回车
First sector (2048-209715199, default 2048):  #默认最小起始值,可直接回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): 默认最大起始值,可直接回车
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set

Command (m for help): w  #w保存退出	
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


7、实际操作

1. 使用lsblk命令查看新加入的磁盘信息

[root@test ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk
└─sda1   8:1    0   40G  0 part /
sdb      8:16   0  100G  0 disk

从上述结果可以看出,系统中新加了一个磁盘设备/dev/sdb。

2、使用fdisk或者cfdisk分区新磁盘,并将分区标记为Linux文件系统类型(83)

[root@test ~]# fdisk /dev/sdb
Command (m for help): n  #创建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): #默认是P创建主分区可以不填写,可直接回车
Using default response p
Partition number (1-4, default 1):   #默认分区1,可直接回车
First sector (2048-209715199, default 2048):  #默认最小起始值,可直接回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): 默认最大起始值,可直接回车
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set

Command (m for help): w  #w保存退出	
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

查看

[root@r1-cloudops-lizhe-20240417-2 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk
└─sda1   8:1    0   40G  0 part /
sdb      8:16   0  100G  0 disk
└─sdb1   8:17   0  100G  0 part

3、格式化新分区,使用mkfs命令

[root@test ~]# mkfs.xfs  -f /dev/sdb1
Discarding blocks...Done.
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=6553536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26214144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12799, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

-f 强制格式化

4、查看磁盘UUID进行开机自动挂载

查看磁盘UUID

[root@test ~]# blkid
/dev/sda1: UUID="9cgg3d96-1111-4ad9-2222-9c54060683f9" TYPE="xfs"
/dev/sdb1: UUID="cef69431-a3a9-4f87-bsj0-78f0so9746f5" TYPE="xfs"	
[root@r1-cloudops-lizhe-20240417-2 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Oct 30 14:22:27 2020
#
# 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
#
UUID=9cgg3d96-1111-4ad9-2222-9c54060683f9 /                       xfs     defaults        0 0
UUID=cef69431-a3a9-4f87-bsj0-78f0so9746f5 /data                       xfs     defaults        0 0

5、挂载

创建挂载文件

[root@test ~]# mkdir /data

挂载分区,使用mount命令

mount /dev/sdb1 /data
[root@test ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk
└─sda1   8:1    0   40G  0 part /
sdb      8:16   0  100G  0 disk
└─sdb1   8:17   0  100G  0 part /data