2023-06-03    2024-01-10    2870 字  6 分钟

本章节主要解释磁盘分区,磁盘阵列等磁盘相关知识。

磁盘分区

为主机分别添加一个1T4T的磁盘。

可以通过查看/dev下面的设备或者lsblk命令确认磁盘是否添加成功。

1
2
3
4
5
6
7
8
[root@localhost ~]# ll /dev/sd*
brw-rw----. 1 root disk 8,  0 Aug 19 19:32 /dev/sda
brw-rw----. 1 root disk 8,  1 Aug 19 19:32 /dev/sda1
brw-rw----. 1 root disk 8,  2 Aug 19 19:32 /dev/sda2
brw-rw----. 1 root disk 8,  3 Aug 19 19:32 /dev/sda3
# /dev/sdb /dev/sdc为新添加的磁盘
brw-rw----. 1 root disk 8, 16 Aug 19 19:32 /dev/sdb
brw-rw----. 1 root disk 8, 32 Aug 19 19:32 /dev/sdc

lsblk 是一个用于列出块设备信息的命令。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@localhost ~]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  800M  0 part [SWAP]
└─sda3   8:3    0 18.2G  0 part /
# /dev/sdb /dev/sdc为新添加的磁盘
sdb      8:16   0    1T  0 disk 
sdc      8:32   0    4T  0 disk 
sr0     11:0    1  4.3G  0 rom  

分区概念

Linux中,分区分为主分区,扩展分区和逻辑分区。

主分区:在Linux中,分区表有64个字节的限制,而每个分区条目的大小为16字节,所以最多只能有4个分区,这4个分区就是我们说的主分区。

扩展分区:为了突破一个物理硬盘只能有4个分区的限制,引入了扩展分区。扩展分区和主分区的地位相当,但是扩展分区本身不能被直接使用,然而可以被继续划分成多个逻辑分区。

逻辑分区:逻辑分区可以有任意多个,但是不能独立存在。

fdisk工具

fdisk仅可针对2T以下的磁盘进行分区操作。

通过fdisk创建主分区。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@localhost ~]# 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 0xaa8a2dfe.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)     # p为主分区
   e   extended   # e为扩展分区
Select (default p):  # 默认为p
Using default response p
Partition number (1-4, default 1): 
First sector (2048-2147483647, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2147483647, default 2147483647): +10G  #选择创建的分区大小
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): p

Disk /dev/sdb: 1099.5 GB, 1099511627776 bytes, 2147483648 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: 0xaa8a2dfe

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux

创建扩展分区。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Command (m for help): n       
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (2-4, default 2): 
First sector (20973568-2147483647, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-2147483647, default 2147483647): 
Using default value 2147483647
Partition 2 of type Extended and of size 1014 GiB is set

Command (m for help): p

Disk /dev/sdb: 1099.5 GB, 1099511627776 bytes, 2147483648 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: 0xaa8a2dfe

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568  2147483647  1063255040    5  Extended

创建逻辑分区。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (20975616-2147483647, default 20975616): 
Using default value 20975616
Last sector, +sectors or +size{K,M,G} (20975616-2147483647, default 2147483647): +20G
Partition 5 of type Linux and of size 20 GiB is set

Command (m for help): p

Disk /dev/sdb: 1099.5 GB, 1099511627776 bytes, 2147483648 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: 0xaa8a2dfe

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568  2147483647  1063255040    5  Extended
/dev/sdb5        20975616    62918655    20971520   83  Linux

保存分区信息。

1
2
3
4
5
Command (m for help): w
The partition table has been altered!

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

查看分区信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@localhost ~]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  800M  0 part [SWAP]
└─sda3   8:3    0 18.2G  0 part /
sdb      8:16   0    1T  0 disk 
├─sdb1   8:17   0   10G  0 part 
├─sdb2   8:18   0    1K  0 part 
└─sdb5   8:21   0   20G  0 part 
sdc      8:32   0    4T  0 disk 
sr0     11:0    1  4.3G  0 rom 

格式化磁盘。ext4xfs是最常用的文件系统,如果需要处理大文件和大容量存储,并且对性能要求较高,XFS可能是更合适的选择。对于一般用途和通用性能要求,ext4是一个可靠且广泛支持的选项。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# mkfs.xfs /dev/sdb1
# 将/dev/sdb1格式化为xfs格式
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
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
[root@localhost ~]# mkfs.xfs /dev/sdb5
# 将/dev/sdb5格式化为xfs格式
meta-data=/dev/sdb5              isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
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

挂载。

[root@localhost ~]# mkdir /sdb1
[root@localhost ~]# mkdir /sdb5
[root@localhost ~]# mount /dev/sdb1 /sdb1
[root@localhost ~]# mount /dev/sdb5 /sdb5

查看挂载后的空间。

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G   19G   33M 100% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1      1014M  127M  888M  13% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/sdb1        10G   33M   10G   1% /sdb1
/dev/sdb5        20G   33M   20G   1% /sdb5

gdisk工具

大于2T的磁盘,需要使用gdisk进行分区。

安装gdisk

1
[root@localhost ~]# yum install gdisk

通过gdisk对磁盘进行分区。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@localhost ~]# gdisk /dev/sdc
Command (? for help): n      # 新建分区
Partition number (1-128, default 1): 
First sector (2048-8589934558, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-8589934558, default = 8589934558) or {+-}size{KMGTP}: +2T      #创建2T的分区
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): n    # 新建分区
Partition number (2-128, default 2): 
First sector (4294969344-8589934558, default = 4294969344) or {+-}size{KMGTP}: 
Last sector (4294969344-8589934558, default = 8589934558) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w
# 保存分区信息
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.

查看分区信息。

[root@localhost ~]# lsblk 
sdc      8:32   0    4T  0 disk 
├─sdc1   8:33   0    2T  0 part 
└─sdc2   8:34   0    2T  0 part  

格式化分区。

[root@localhost ~]# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1              isize=512    agcount=4, agsize=134217728 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=536870912, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=262144, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkfs.xfs /dev/sdc2
meta-data=/dev/sdc2              isize=512    agcount=4, agsize=134217663 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=536870651, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=262143, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

创建挂载点,并将分区挂载到指定的目录。

[root@localhost ~]# mkdir -p /data/sdc1 /data/sdc2
[root@localhost ~]# mount /dev/sdc1 /data/sdc1
[root@localhost ~]# mount /dev/sdc2 /data/sdc2

检查挂载详情。

[root@localhost ~]# df -h
/dev/sdc1       2.0T   33M  2.0T   1% /data/sdc1
/dev/sdc2       2.0T   33M  2.0T   1% /data/sdc2

挂载文件系统

挂载与卸载

mount 命令用于将文件系统挂载到指定的挂载点上,使得该文件系统可以在指定位置访问。

通过设备名称或者UUID挂载设备。

1
2
3
4
5
6
7
8
9
# 通过设备名称挂载
[root@localhost ~]# mount /dev/sdc1 /data/sdc1
# 通过UUID称挂载
[root@localhost ~]# blkid /dev/sdc2
/dev/sdc2: UUID="a78ece78-4570-4555-bbd5-7f3c723a5f56" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="569cd012-bb0a-4a87-8471-e056ced2d214"
[root@localhost ~]# mount UUID="a78ece78-4570-4555-bbd5-7f3c723a5f56" /data/sdc2
[root@localhost ~]# df -h
/dev/sdc1       2.0T   33M  2.0T   1% /data/sdc1
/dev/sdc2       2.0T   33M  2.0T   1% /data/sdc2

卸载设备。

[root@localhost ~]# umount /dev/sdc1
[root@localhost ~]# umount /data/sdc2

设置开机自动挂载

查看设备的UUID

[root@localhost ~]# blkid /dev/sdc1
/dev/sdc1: UUID="fb268812-69fc-4b4f-b4e6-1dd60351059e" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="e176d454-9b18-49d9-873b-477ab33943e5"
[root@localhost ~]# blkid /dev/sdc2
/dev/sdc2: UUID="a78ece78-4570-4555-bbd5-7f3c723a5f56" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="569cd012-bb0a-4a87-8471-e056ced2d214" 

编辑/etc/fstab文件,添加要挂载的设备信息。

[root@localhost ~]# tail -2 /etc/fstab
UUID=fb268812-69fc-4b4f-b4e6-1dd60351059e /data/sdc1 xfs defaults 0 0
UUID=a78ece78-4570-4555-bbd5-7f3c723a5f56 /data/sdc2 xfs defaults 0 0

加载/etc/fstab文件,并同时检验语法是否存在错误。

[root@localhost ~]# mount -a

重启服务器,验证结果。

[root@localhost ~]# reboot
[root@localhost ~]# df -h
/dev/sdc1       2.0T   33M  2.0T   1% /data/sdc1
/dev/sdc2       2.0T   33M  2.0T   1% /data/sdc2

/etc/fstab文件含义。

要挂载的设备 挂载点 文件系统 挂载参数 是否备份 是否检查
UUID= /data/sdc2 xfs defaults 0 0

swap交换分区

当内存不够时,swap分区会充当内存,防止系统出现OOM (OutOfMemroy)故障。 但是如果使用了swap分区,系统会变的特别卡。

swap分区进行操作。 创建分区,并格式化为swap格式。

[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# lsblk /dev/sdb 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  300G  0 disk 
└─sdb1   8:17   0    1G  0 part

[root@localhost ~]# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old xfs signature.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=ff384ce5-9132-4f52-8af8-be2c8724057a

扩展swap分区。

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972          95         739           7         137         718
Swap:           799           0         799

[root@localhost ~]# swapon /dev/sdb1
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972          95         738           7         137         717
Swap:          1823           0        1823

缩小swap分区。

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         103         691           7         177         688
Swap:          1823           0        1823
[root@localhost ~]# swapoff /dev/sdb1
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         102         692           7         177         689
Swap:           799           0         799

关闭所有的swap

[root@localhost ~]# swapoff -a
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         103         691           7         177         688
Swap:             0           0           0

检查当前swap分区有哪些设备。

[root@localhost ~]# swapon /dev/sdb1
[root@localhost ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/sda2                              	partition	819196	0	-2
/dev/sdb1                              	partition	1048572	0	-3

磁盘阵列

RAID0:条带卷,最少需要两块硬盘,读写性能好,但是没有容错机制。 RAID0

RAID1:镜像卷,读写性能一般,有容错机制,磁盘利用率为50%。 RAID1

RAID5:校验卷,至少3块硬盘,仅允许坏一块硬盘,硬盘的利用率为(n-1)/n,读写较快。 RAID5

RAID10:RAID0和RAID1的组合,具有RAID0的读写速度和RAID1的容错机制,但是磁盘利用率为50%。 RAID10


image-20231028232834657