查看系统上的所有磁盘

在对磁盘分区之前,首先需要知道系统有哪些磁盘,使用 lsblk 工具可以列出系统上的所有磁盘列表,如:

  1. ubuntu@ubuntu:~$ lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. loop0 7:0 0 48.5M 1 loop /snap/core18/1883
  4. loop1 7:1 0 63.6M 1 loop /snap/lxd/16103
  5. loop2 7:2 0 26M 1 loop /snap/snapd/8543
  6. loop3 7:3 0 27M 1 loop /snap/snapd/10494
  7. loop4 7:4 0 48.9M 1 loop /snap/core18/1949
  8. sda 8:0 0 111.8G 0 disk
  9. └─sda1 8:1 0 111.8G 0 part
  10. sdb 8:16 0 465.8G 0 disk
  11. ├─sdb1 8:17 0 517.7M 0 part
  12. ├─sdb2 8:18 0 517.7M 0 part
  13. ├─sdb3 8:19 0 456.3G 0 part
  14. ├─sdb4 8:20 0 517.7M 0 part
  15. └─sdb5 8:21 0 8G 0 part
  16. mmcblk0 179:0 0 29.7G 0 disk
  17. ├─mmcblk0p1 179:1 0 256M 0 part /boot/firmware
  18. └─mmcblk0p2 179:2 0 29.5G 0 part /

其输出信息有:

  • NAME:设备的文件名,会忽略 /dev 等前导目录
  • MAJ:MIN:内核识别的设备都是通过这两个代码来实现的,分别是主要与次要设备代码
  • RM:是否为可卸载设备,如光盘、USB 磁盘等
  • SIZE:磁盘容量
  • RO:是否为只读设备
  • TYPE:是磁盘(disk)、分区(partition)还是只读存储器(rom)等输出
  • MOUNTPOINT:挂载点

当添加参数选项会有更详细的信息输出,具体有哪些参数选项可以通过 man lsblk 查看:

  1. ubuntu@ubuntu:~$ lsblk -fp
  2. NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
  3. /dev/loop0 squashfs 0 100% /snap/core18/1883
  4. /dev/loop1 squashfs 0 100% /snap/lxd/16103
  5. /dev/loop2 squashfs 0 100% /snap/snapd/8543
  6. /dev/loop3 squashfs 0 100% /snap/snapd/10494
  7. /dev/loop4 squashfs 0 100% /snap/core18/1949
  8. /dev/sda
  9. └─/dev/sda1 exfat glowy 2629-FC83
  10. /dev/sdb
  11. ├─/dev/sdb1 linux_raid_member 9 48be7bcd-7e53-55d0-3eb8-79f89b90ff5d
  12. ├─/dev/sdb2 linux_raid_member 256 e0dfc238-e782-0eb0-1aac-15ee5f6a1f8f
  13. ├─/dev/sdb3
  14. ├─/dev/sdb4 linux_raid_member 13 274e5c8c-ee45-b44b-a688-05c6de82ea30
  15. └─/dev/sdb5 linux_raid_member 322 afee9a85-436a-9a51-c1ce-64398e3c7b50
  16. /dev/mmcblk0
  17. ├─/dev/mmcblk0p1 vfat system-boot B726-57E2 155.5M 38% /boot/firmware
  18. └─/dev/mmcblk0p2 ext4 writable 483efb12-d682-4daf-9b34-6e2f774b56f7 25.2G 9% /

获取磁盘分区表类型与分区信息

parted 能够列出磁盘的分区表类型与分区信息,如:

  1. ubuntu@ubuntu:~$ sudo parted /dev/sdb print
  2. Model: ST950032 5AS (scsi)
  3. Disk /dev/sdb: 500GB
  4. Sector size (logical/physical): 512B/512B
  5. Partition Table: gpt
  6. Disk Flags:
  7. Number Start End Size File system Name Flags
  8. 1 20.5kB 543MB 543MB ext3 primary msftdata
  9. 2 543MB 1086MB 543MB linux-swap(v1) primary msftdata
  10. 3 1086MB 491GB 490GB primary msftdata
  11. 4 491GB 492GB 543MB ext3 primary msftdata
  12. 5 492GB 500GB 8554MB linux-swap(v1) primary msftdata

分区表主要有两种格式,一种是限制较多的 MBR 分区表,另一种是较新且限制较少的 GPT 分区表,上面信息所展示的的分区表格式就是 GPT。

磁盘分区

分区表为 GPT 格式需要使用 gdisk 进行分区,gdisk 的使用相对简单,因为它的操作有交互式的提示。对某个磁盘进行分区的命令格式为 gdisk 设备名 ,如 gdisk /dev/sda

  1. ubuntu@ubuntu:/etc/apt$ gdisk /dev/sda
  2. GPT fdisk (gdisk) version 1.0.5
  3. Problem opening /dev/sda for reading! Error is 13.
  4. You must run this program as root or use sudo!
  5. ubuntu@ubuntu:/etc/apt$ sudo gdisk /dev/sda
  6. [sudo] password for ubuntu:
  7. GPT fdisk (gdisk) version 1.0.5
  8. Partition table scan:
  9. MBR: MBR only
  10. BSD: not present
  11. APM: not present
  12. GPT: not present
  13. ***************************************************************
  14. Found invalid GPT and valid MBR; converting MBR to GPT format
  15. in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
  16. typing 'q' if you don't want to convert your MBR partitions
  17. to GPT format!
  18. ***************************************************************
  19. Command (? for help):

根据提示,我们可以输入 ? 来查看所有的选项:

  1. Command (? for help): ?
  2. b back up GPT data to a file
  3. c change a partition's name
  4. d delete a partition
  5. i show detailed information on a partition
  6. l list known partition types
  7. n add a new partition
  8. o create a new empty GUID partition table (GPT)
  9. p print the partition table
  10. q quit without saving changes
  11. r recovery and transformation options (experts only)
  12. s sort partitions
  13. t change a partition's type code
  14. v verify disk
  15. w write table to disk and exit
  16. x extra functionality (experts only)
  17. ? print this menu

根据自己的需要选择不同的选项即可。最后保存的时候,输入 w,随后重启服务器就能更新分区信息了。

对分区进行格式化

分完区之后需要进行文件系统的格式化,之后操作系统才能够使用这个文件系统。使用 mkfs 命令可以调用正确的文件系统格式化工具软件。

例如想要将硬盘格式化为 xfs 格式,则可以调用 mkfs.xfs 命令:

  1. ubuntu@ubuntu:~$ sudo mkfs.xfs -f /dev/sda1
  2. meta-data=/dev/sda1 isize=512 agcount=4, agsize=7326237 blks
  3. = sectsz=4096 attr=2, projid32bit=1
  4. = crc=1 finobt=1, sparse=1, rmapbt=0
  5. = reflink=1
  6. data = bsize=4096 blocks=29304945, imaxpct=25
  7. = sunit=0 swidth=0 blks
  8. naming =version 2 bsize=4096 ascii-ci=0, ftype=1
  9. log =internal log bsize=4096 blocks=14309, version=2
  10. = sectsz=4096 sunit=1 blks, lazy-count=1
  11. realtime =none extsz=4096 blocks=0, rtextents=0

文件系统挂载与卸载

文件系统的挂载使用的是 mount 命令,通过 mount --help 得知可以使用 mount [options] <source> <directory> 格式进行挂载,而 <source> 的格式有:

Source:

  • -L, —label
  • -U, —uuid synonym for UUID=
  • LABEL=
  • UUID= specifies device by filesystem UUID
  • PARTLABEL=
  • PARTUUID= specifies device by partition UUID
  • specifies device by path
  • mountpoint for bind mounts (see —bind/rbind)
  • regular file for loopdev setup

后面使用 UUID= 的格式进行挂载。在挂在之前,现在根目录创建一个空目录,如 /ssd。随后通过下面的命令来获取分区的 uuid:

  1. ubuntu@ubuntu:/$ lsblk -f
  2. NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
  3. loop0 squashfs 0 100% /snap/core18/1883
  4. loop1 squashfs 0 100% /snap/core18/1949
  5. loop2 squashfs 0 100% /snap/lxd/16103
  6. loop3 squashfs 0 100% /snap/snapd/8543
  7. loop4 squashfs 0 100% /snap/snapd/10494
  8. sda xfs 1d88d342-8f0d-440d-9c41-5308ce64f0be
  9. └─sda1 xfs 18682d23-14e9-43b5-ad37-a71492fda816 110.9G 1% /ssd
  10. sdb
  11. └─sdb1 xfs e2fc2e09-4d65-4d31-90aa-cd2149f0817b
  12. mmcblk0
  13. ├─mmcblk0p1 vfat system-boot B726-57E2 155.5M 38% /boot/firmware
  14. └─mmcblk0p2 ext4 writable 483efb12-d682-4daf-9b34-6e2f774b56f7 24.6G 11% /

以 sda1 来进行挂载,则执行下面的命令即可:

  1. sudo mount UUID="18682d23-14e9-43b5-ad37-a71492fda816" /ssd

随后可以执行 lsblk 查看是否已经挂载好了:

  1. ubuntu@ubuntu:/$ lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. loop0 7:0 0 48.5M 1 loop /snap/core18/1883
  4. loop1 7:1 0 48.9M 1 loop /snap/core18/1949
  5. loop2 7:2 0 63.6M 1 loop /snap/lxd/16103
  6. loop3 7:3 0 26M 1 loop /snap/snapd/8543
  7. loop4 7:4 0 27M 1 loop /snap/snapd/10494
  8. sda 8:0 0 111.8G 0 disk
  9. └─sda1 8:1 0 111.8G 0 part /ssd
  10. sdb 8:16 0 465.8G 0 disk
  11. └─sdb1 8:17 0 465.8G 0 part
  12. mmcblk0 179:0 0 29.7G 0 disk
  13. ├─mmcblk0p1 179:1 0 256M 0 part /boot/firmware
  14. └─mmcblk0p2 179:2 0 29.5G 0 part /

从上面的信息可以看出,sda1 的挂载点已经变为 /ssd 了,这时候就可以确认 sda1 分区已经挂载成功了。

卸载掉已挂载的文件系统,可以使用 unmount 命令,格式为 unmount 设备文件名或挂载点

设置启动挂载

前面所提到的手动挂载,每次系统重启之后都需要重新手动挂载一次是非常麻烦的,因此我们需要让系统在启动的时候自动挂载。

想要系统在启动的时候自动挂载,只需要修改 /etc/fstab 文件即可,/etc/fstab 内容如下:

  1. ubuntu@ubuntu:~$ cat /etc/fstab
  2. LABEL=writable / ext4 defaults 0 0
  3. LABEL=system-boot /boot/firmware vfat defaults 0 1
  4. UUID=18682d23-14e9-43b5-ad37-a71492fda816 /ssd xfs defaults 0 0
  5. UUID=e2fc2e09-4d65-4d31-90aa-cd2149f0817b /hhd xfs defaults 0 0
  • 第一列:磁盘设备文件名 /UUID/LABEL name
  • 第二列:挂载点
  • 第三列:磁盘分区的文件系统
  • 第四列:文件系统参数
  • 第五列:能否被 dump 备份命令作用。现在有太多的备份方案,因此这一项不需要理会,直接输入 0 即可。
  • 第六列:是否以 fsck 检验扇区。使用 xfs 文件系统这个是没有办法适用的,因为 xfs 会自己进行检验,因此这一项直接填 0 即可。

参考资料

  • 《鸟哥的Linux私房菜》基础学习篇第四版第七章