查看原文
其他

Linux硬盘与文件系统(6)

Cloud研习社 Cloud研习社 2023-06-06
一块硬盘从买过来插到服务器上以后需要经过:分区、格式化、检验格式化、挂载四个步骤以后才能使用。
今天我们来看看硬盘的分区。
硬盘分区有两种格式:MBR和GPT。这两种格式需要的分区工具不一样,一般对应fdisk和gdisk。


观察硬盘分区状态


  • lsblk 列出系统上的所有硬盘列表
[root@studyclub ~]# lsblk [-fpmtdi] [device]
选项与参数
-f    列出该磁盘内(分区的)的文件系统名称(掌握)
-p    列出磁盘的完整路径名称,而不是仅仅列出最后的设备名(掌握)
-m    输出设备文件的rwx属性
-t    列出设备的详细数据,包括磁盘队列机制,预读写的数据量大小。
-d    仅列出磁盘本身的信息,不体现分区的信息
-i    使用简单的形式输出,防止出现乱码

实例演练:
  1. 列出本系统的磁盘及分区信息
[root@studyclub ~]# lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk
├─sda1   8:1    0 190M  0 part /boot
├─sda2   8:2    0  1.9G  0 part [SWAP]
└─sda3   8:3    0 17.9G  0 part /
sdb      8:16   0   10G  0 disk
sdc      8:32   0   1G  0 disk
sr0     11:0    1 1024M  0 rom

从上面我们可以看到本系统有三个sata盘:sda、sdb、sdc,一个sr0。其中sda有被分了三个分区:sda1、sda2、sda3。我们来看看输出的每一列是什么信息:
  • NAME:设备的名称(省略了/dev字样)
  • MAJ:MIN:设置的主代码和次代码
  • RM:是否为可移除设备,如光盘、usb磁盘等
  • SIZE:磁盘的总容量
  • RO:是否为只读
  • TYPE:表明是磁盘(disk)、分区(partition)还是只读存储(rom)
  • MOUNTPOINT:挂载点,表明设备挂载到了哪个目录下
    2. 列出设备的完整路径、列出设备的UUID

[root@studyclub ~]# lsblk -fp
NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/sda
├─/dev/sda1 xfs 45531942-02d8-4c7a-b50e-98f4b6b8efd4 /boot
├─/dev/sda2 swap 39cb7392-e161-416a-ac14-84ff0f08b719 [SWAP]
└─/dev/sda3 xfs a512fe7c-c4ea-4cd9-87fb-cb305f2c8460 /
/dev/sdb xfs 079e1532-52a6-4c6d-bad5-b8a2e8ed1e2f
/dev/sdc ext4 3884426e-03b1-4559-b0f8-a8576b1a53bd
/dev/sr

  • blkid 列出设备的UUID等参数
上面通过lsblk加参数可以查看设备的UUID,但是在生产中还是比较习惯blkid查看设备的UUID。那么UUID是什么呢?UUID是设备的唯一标识,他可以用来挂载设备。
[root@studyclub ~]# blkid
/dev/sda1: UUID="45531942-02d8-4c7a-b50e-98f4b6b8efd4" TYPE="xfs"
/dev/sda2: UUID="39cb7392-e161-416a-ac14-84ff0f08b719" TYPE="swap"
/dev/sda3: UUID="a512fe7c-c4ea-4cd9-87fb-cb305f2c8460" TYPE="xfs"
/dev/sdb: UUID="079e1532-52a6-4c6d-bad5-b8a2e8ed1e2f" TYPE="xfs"
/dev/sdc: UUID="3884426e-03b1-4559-b0f8-a8576b1a53bd" TYPE="ext4"

从上面我们可以看到,列出了设备的绝对路径,UUID还有文件系统类型,这对于用户来说是相当的友好了。


硬盘分区(相当于为新建的房子打隔间)


我们前面提到过,对于GPT和MBR两种类型的分区表,需要使用不同的工具来进行分区:gdisk和fdisk。【直观的区分方法就是2T以内的硬盘用fdisk,2T以上的硬盘用gdisk】
我们先来看看怎么查看硬盘分区表类型和分区信息。
# 先看看我的虚拟机
[root@studyclub ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt# 分区表的格式,这里是GPT(还有一种是MBR)
Disk Flags:

Number Start End Size File system Name Flags


# 再看看生产环境上的信息
[root@sds1 ~]# parted /dev/sdac print
Model: ATA ST8000NM0055-1RM (scsi)# 厂家及接口信息,ST8000NM0055可以看出是希捷的硬盘
Disk /dev/sdac: 8002GB# 硬盘容量
Sector size (logical/physical): 512B/4096B# 每个逻辑、物理扇区的容量
Partition Table: gpt# 分区表的格式,这里是GPT(还有一种是MBR)
Disk Flags:

Number Start End Size File system Name Flags
1     1049kB 21.5GB 21.5GB xfs ceph data
3      21.5GB 24.7GB 3221MB ceph xstore.wal
2      24.7GB 8002GB 7977GB ceph block

补充知识点:我们看到上面的生产环境有一个磁盘的名称是/dev/sdac,这是因为这个服务器上的硬盘数量超过了26个(a-z),超过26个以后,操作系统就会命名为aa、ab、ac、ad......
MBR分区表使用fdisk,GPT分区表使用gdisk。这两个命令在执行后都会有提示信息,所以不需要刻意记忆怎么操作。
[root@studyclub ~]# gdisk /dev/sdb# 注意gdisk的参数是设备名,不是分区名,所以不能写sda1这种的名字
GPT fdisk (gdisk) version 0.8.10

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

Found valid GPT with protective MBR; using GPT.

Command (? for help): ?# 输入问号,查看有哪些操作项
bback up GPT data to a file
cchange a partition's name
ddelete a partition# 删除一个分区
ishow detailed information on a partition
llist known partition types
nadd a new partition# 增加一个分区
ocreate a new empty GUID partition table (GPT)
pprint the partition table# 查看分区表
qquit without saving changes# 不保存修改,并退出gdisk
rrecovery and transformation options (experts only)
ssort partitions
tchange a partition's type code
vverify disk
wwrite table to disk and exit# 保存修改的信息并退出gdisk
xextra functionality (experts only)
?print this menu

Command (? for help):
好了,通过上面的内容我们已经知道,在gdisk里的操作非常简单,对于学习,我们可以任意操作,只要离开gdisk是按下q即可。如果想保存修改的分区,请按w键,这个时候修改后的分区才会生效。我们来给/dev/sdb做两个分区:
Command (? for help): n# 新增一个分区
Partition number (1-128, default 1):
First sector (34-20971486, default = 2048) or {+-}size{KMGTP}: # 采用默认值,直接回车
Last sector (2048-20971486, default = 20971486) or {+-}size{KMGTP}: +2G# 不用算大小,直接用加号和你需要的大小表示即可,然后回车。
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): # 默认值即可,直接回车。这里是让用户选择将来这个分区要格式化的文件系统,默认是linux文件系统。
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 20971520 sectors, 10.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): BAA2350E-2B57-4022-9A6C-436AB1022E9D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 20971486
Partitions will be aligned on 2048-sector boundaries
Total free space is 16777149 sectors (8.0 GiB)

Number Start (sector) End (sector) Size       Code Name
  1            2048         4196351   2.0 GiB 8300 Linux filesystem
重点:Last sector这一行,绝对不要使用默认值,因为默认值就是把整个磁盘的容量全部占满。
我们来看看上面p输出的信息:
  • Number:分区号
  • Start (sector):用来说明当前分区是从哪个扇区开始的,我们这个例子是从2048扇区开始属于分区1
  • End (sector):用来说明当前分区是在哪个扇区结束的,我们这个例子是在4196351扇区结束的1号分区
  • Size:对应分区的大小
  • Code:该分区的可能的文件系统类型,不一定是最终真实的文件系统,仅仅是一个提示而已
  • Name:文件系统类型的名字
另外,输入文件系统类型的时候,如果不想用默认值,也可以输入特定值,gdisk里可以查看有哪些可以用:
Command (? for help): l
0700 Microsoft basic data 0c01 Microsoft reserved 2700 Windows RE
3000 ONIE boot 3001 ONIE config 4100 PowerPC PReP boot
4200 Windows LDM data      4201 Windows LDM metadata 7501 IBM GPFS
7f00 ChromeOS kernel 7f01 ChromeOS root 7f02 ChromeOS reserved
8200 Linux swap 8300 Linux filesystem 8301 Linux reserved
8302 Linux /home 8400 Intel Rapid Start     8e00 Linux LVM
a500 FreeBSD disklabel a501 FreeBSD boot a502 FreeBSD swap
a503 FreeBSD UFS a504 FreeBSD ZFS a505 FreeBSD Vinum/RAID
a580 Midnight BSD data     a581 Midnight BSD boot a582 Midnight BSD swap
a583 Midnight BSD UFS a584 Midnight BSD ZFS a585 Midnight BSD Vinum
a800 Apple UFS a901 NetBSD swap a902 NetBSD FFS
a903 NetBSD LFS a904 NetBSD concatenated a905 NetBSD encrypted
a906 NetBSD RAID ab00 Apple boot af00 Apple HFS/HFS+
af01 Apple RAID af02 Apple RAID offline   af03 Apple label
af04 AppleTV recovery     af05 Apple Core Storage   be00 Solaris boot
bf00 Solaris root bf01 Solaris /usr & Mac Z bf02 Solaris swap
bf03 Solaris backup       bf04 Solaris /var         bf05 Solaris /home
bf06 Solaris alternate se bf07 Solaris Reserved 1   bf08 Solaris Reserved 2  
bf09 Solaris Reserved 3   bf0a Solaris Reserved 4   bf0b Solaris Reserved 5  
c001 HP-UX data           c002 HP-UX service ea00 Freedesktop $BOOT
eb00 Haiku BFS ed00 Sony system partitio ed01 Lenovo system partit
Press the <Enter> key to see more codes: # 敲回车键
ef00 EFI System           ef01 MBR partition scheme ef02 BIOS boot partition
fb00 VMWare VMFS fb01 VMWare reserved fc00 VMWare kcore crash p
fd00 Linux RAID
一个磁盘创建多个分区,只需要重复上面的创建步骤(从输入n开始)即可,系统会默认开始的sector,我们只需要输入分区大小就可以了。【请自行添加分区:sdb分为三个分区,分别为2G,2G,其余空间全部分给第三个分区】

  • partprobe:更新分区表信息
如果是给正在使用的硬盘做分区,在分区完成后可能无法立刻看到效果。这时候有两个方法,一是重启,二是通过partprobe更新linux内核的分区表信息:
partprobe [-s]
-s 把信息打印到屏幕上,而不仅仅是更新以后没有反馈信息。

[root@studyclub ~]# partprobe -s
/dev/sda: msdos partitions 1 2 3
/dev/sdb: gpt partitions 1 2 3

[root@studyclub ~]# lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk
├─sda1   8:1    0 190M  0 part /boot
├─sda2   8:2    0  1.9G  0 part [SWAP]
└─sda3   8:3    0 17.9G  0 part /
sdb      8:16   0   10G  0 disk
├─sdb1   8:17   0   2G  0 part
├─sdb2   8:18   0   2G  0 part
└─sdb3   8:19   0   6G  0 part
sdc      8:32   0   1G  0 disk
sr0     11:0    1 1024M  0 rom
  • fdisk:
fdisk和gdisk的用法一致,我们来看:
[root@studyclub ~]# fdisk /dev/sdc
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 0xf94d0d72.

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# 删除分区
  g create a new empty GPT partition table# 新增一个GPT分区,我们不建议用
  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# 退出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)
课后作业:
  • 练习gdisk的用法:删除上面创建的三个分区,并重新分区
  • 练习fdisk的用法:创建三个分区并保存,然后看分区是否成功
  • 总结本文用到的6个命令

新手应知:
    尝鲜Rocky Linux
《Linux基础及进阶》:
    016 - Linux硬盘与文件系统(1)
    017 - Linux硬盘与文件系统(2)
    018 - Linux硬盘与文件系统(3)
    019 - Linux硬盘与文件系统(4)
    020 - Linux硬盘与文件系统(5)

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存