Linux 磁盘管理-终于把fdisk命令创建分区挂讲明白了
今天给伙伴们分享一下Linux 磁盘管理-fdisk命令创建分区挂在使用,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
1、挂载硬件设备
-
mount命令用于挂载文件系统, 格式完成
-
格式为“mount文件系统 挂载目录”。 把文件系统和磁盘设备关联
表6-3 mount命令中的参数以及作用
参数 | 作用 |
---|---|
-a | 挂载所有在/etc/fstab中定义的文件系统 |
-t | 指定文件系统的类型 |
例如,要把设备/dev/sdb2挂载到/backup目录,只需要在mount命令中填写设备与挂载目录参数就行,系统会自动判断要挂载文件的类型,命令如下:
[root@edenluo.com ~]# mount /dev/sdb2 /backup
如果在工作中要挂载一块网络存储设备,该设备的名字可能会变来变去,这样再写为sdb就不太合适了。这时推荐用UUID(Universally Unique Identifier,通用唯一识别码)进行挂载操作。
UUID是一串用于标识每块独立硬盘的字符串,具有唯一性及稳定性,特别适合用来挂载网络设备。
blkid命令用于显示设备的属性信息,英文全称为“block id”,语法格式为“blkid [设备名]”。使用blkid命令来查询设备UUID的示例如下:
[root@edenluo.com ~]# blkid
/dev/sdb1: UUID="2db66eb4-d9c1-4522-8fab-ac074cd3ea0b" TYPE="xfs" PARTUUID="eb23857a-01"
/dev/sdb2: UUID="478fRb-1pOc-oPXv-fJOS-tTvH-KyBz-VaKwZG" TYPE="ext4" PARTUUID="eb23857a-02"
有了设备的UUID值之后,就可以用它挂载网络设备了:
[root@edenluo.com ~]# mount UUID=478fRb-1pOc-oPXv-fJOS-tTvH-KyBz-VaKwZG /backup
虽然按照上面的方法执行mount命令后就能立即使用文件系统了,但系统在重启后挂载就会失效,也就是说需要每次开机后都手动挂载一下
如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”(各字段的意义见表6-4)写入到/etc/fstab文件中。这个文件中包含着挂载所需的诸多信息项目,一旦配置好之后就能一劳永逸了。
表6-4 用于挂载信息的指定填写格式中,各字段所表示的意义
字段 | 意义 |
---|---|
设备文件 | 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier) |
挂载目录 | 指定要挂载到的目录,需在挂载前创建好 |
格式类型 | 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等 |
权限选项 | 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async |
是否备份 | 若为1则开机后使用dump进行磁盘备份,为0则不备份 |
是否自检 | 若为1则开机后自动进行磁盘自检,为0则不自检 |
如果想将文件系统为Ext4的硬件设备/dev/sdb2在开机后自动挂载到/backup目录上,并保持默认权限且无须开机自检,就需要在/etc/fstab文件中写入下面的信息,这样在系统重启后也会成功挂载。
[root@edenluo.com ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/sdb2 /backup ext4 defaults 0 0
写入到/etc/fstab文件中的设备信息并不会立即生效,需要使用mount -a参数进行自动挂载:
[root@edenluo.com ~]# mount -a
df命令用于查看已挂载的磁盘空间使用情况,英文全称为“disk free”,语法格式为“df -h”。
[root@edenluo.com ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 18M 966M 2% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/sda1 1014M 152M 863M 15% /boot
/dev/sdb2 480M 20M 460M 4% /backup
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
如果是网络存储设备,建议您在fstab文件挂载信息中加上_netdev参数。加上后系统会等联网成功后再尝试挂载这块网络存储设备,从而避免了开机时间过长或失败的情况。
[root@edenluo.com ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/sdb2 /backup ext4 defaults,_netdev 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
umount命令用于卸载设备或文件系统,英文全称为“un mount”,语法格式为“umount [设备文件/挂载目录]”。
[root@edenluo.com ~]# umount /dev/sdb2
如果当前就处于设备所挂载的目录,系统会提示该设备繁忙,此时只需要退出到其他目录后再尝试一次就行了。
[root@edenluo.com ~]# cd /media/cdrom/
[root@edenluo cdrom]# umount /dev/cdrom
umount: /media/cdrom: target is busy.
[root@edenluo cdrom]# cd ~
[root@edenluo.com ~]# umount /dev/cdrom
[root@edenluo.com ~]#
挂载操作就像两人结为夫妻,双方需要同时到场,信息一旦被登记到民政局的系统中,再想重婚(重复挂载某设备)可就不行喽。
lsblk命令用于查看已挂载的磁盘的空间使用情况,英文全称为“list block id”,输入该命令后按回车键执行即可。
[root@edenluo.com ~]# 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 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 6.6G 0 rom /media/cdrom
2、添加硬盘设备
首先需要在虚拟机中模拟添加入一块新的硬盘存储设备,然后再进行分区、格式化、挂载等操作,最后通过检查系统的挂载状态并真实地使用硬盘来验证硬盘设备是否成功添加。
图6-7 在虚拟机系统中添加硬件设备
选择想要添加的硬件类型为“硬盘”,然后单击“下一步”按钮就可以了,如图6-8所示。
图6-8 选择添加硬件类型
选择虚拟硬盘的类型为SATA,并单击“下一步”按钮,如图6-9所示。这样虚拟机中的设备名称过一会儿后应该为/dev/sdb。
图6-9 选择硬盘设备类型
选中“创建新虚拟磁盘”单选按钮,再次单击“下一步”按钮,如图6-10所示。
图6-10 选择“创建新虚拟磁盘”选项
将“最大磁盘大小”设置为默认的20GB。单击“下一步”按钮,如图6-11所示。
图6-11 设置硬盘的最大使用空间
设置磁盘文件的文件名和保存位置(这里采用默认设置即可,无须修改),直接单击“完成”按钮,如图6-12所示。
图6-12 设置磁盘文件的文件名和保存位置
将新硬盘添加好后就可以看到设备信息了。这里不需要做任何修改,直接单击“确定”按钮后就可以启虚拟机了,如图6-13所示。
图6-13 查看虚拟机硬件设置信息
3、创建分区
fdisk命令用于新建、修改及删除磁盘的分区表信息,英文全称为“format disk”,语法格式为“fdisk磁盘名称”。
在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。不过与前面讲解的直接写到命令后面的参数不同,这条命令的参数(见表6-5)是交互式的一问一答的形式,因此在管理硬盘设备时特别方便,可以根据需求动态调整。
表6-5 fdisk命令中的参数以及作用
参数 | 作用 |
---|---|
m | 查看全部可用的参数 |
n | 添加新的分区 |
d | 删除某个分区信息 |
l | 列出所有可用的分区类型 |
t | 改变某个分区的类型 |
p | 查看分区表信息 |
w | 保存并退出 |
q | 不保存直接退出 |
使用fdisk命令来尝试管理/dev/sdb硬盘设备。在看到提示信息后输入参数p来查看硬盘设备内已有的分区信息,其中包括了硬盘的容量大小、扇区个数等信息:
[root@edenluo.com ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32.1).
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.
Created a new DOS disklabel with disk identifier 0x88b2c2b0.
Command (m for help): p
Disk /dev/sdb: 20 GiB, 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
Disklabel type: dos
Disk identifier: 0x88b2c2b0
输入参数n尝试添加新的分区。系统会要求用户是选择继续输入
- 参数p来创建主分区,
- 参数e来创建扩展分区。
这里输入参数p来创建一个主分区:
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
在确认创建一个主分区后,系统要求用户先输入主分区的编号。主分区的编号范围是1~4,因此这里输入默认的1就可以了。接下来系统会提示定义起始的扇区位置,回车保留默认设置即可,系统会自动计算出最靠前的空闲扇区的位置。
系统会要求定义分区的结束扇区位置,这其实就是要去定义整个分区的大小是多少。我们不用去计算扇区的个数,只需要输入+2G即可创建出一个容量为2GB的硬盘分区。
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 此处敲击回车即可
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +2G
Created a new partition 1 of type 'Linux' and of size 2 GiB.
再次使用参数p来查看硬盘设备中的分区信息。果然就能看到一个名称为/dev/sdb1、起始扇区位置为2048、结束扇区位置为4196351的主分区了。需要参数w回车保存配置,这样分区信息才是真正地写入成功。
Command (m for help): p
Disk /dev/sdb: 20 GiB, 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
Disklabel type: dos
Disk identifier: 0x88b2c2b0
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
分区信息中第6个字段的Id值是一个编码,用于标识该分区的作用,可帮助用户快速了解该分区的作用,一般没必要修改。使用l参数查看一下磁盘编码都有哪些,然后在6.6节进行SWAP操作时再修改吧:
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
在上述步骤执行完毕之后,Linux系统会自动把这个硬盘主分区抽象成/dev/sdb1设备文件。可以使用file命令查看该文件的属性,但在实际操作中发现,有些时候系统并没有自动把分区信息同步给Linux内核,而且这种情况似乎还比较常见(但不能算作严重的bug)。可以输入partprobe命令手动将分区信息同步到内核,而且一般推荐连续两次执行该命令,效果会更好。如果使用这个命令都无法解决问题,那么就重启计算机。
[root@edenluo.com ~]# file /dev/sdb1
/dev/sdb1: cannot open `/dev/sdb1' (No such file or directory)
[root@edenluo.com ~]# partprobe
[root@edenluo.com ~]# partprobe
[root@edenluo.com ~]# file /dev/sdb1
/dev/sdb1: block special
4、格式化分区
如果硬件存储设备没有进行格式化,则Linux系统无法得知怎么在其上写入数据。因此,在对存储设备进行分区后还需要进行格式化操作。在Linux系统中用于格式化操作的命令是mkfs。
[root@edenluo.com ~]# mkfs
mkfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs命令把常用的文件系统名称用后缀的方式保存成了多个命令文件,用起来非常简单—mkfs.文件类型名称。例如要将分区为XFS的文件系统进行格式化,则命令应为mkfs.xfs /dev/sdb1。
[root@edenluo.com ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=524288, 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
5、挂载分区到系统目录
-
存储设备完成分区和格式化操作就可以挂载并使用存储设备了。
-
首先是创建一个用于挂载设备的挂载点目录;
-
然后使用mount命令将存储设备与挂载点进行关联;
-
最后使用df -h命令来查看挂载状态和硬盘使用量信息。
[root@edenluo.com ~]# mkdir /newFS
[root@edenluo.com ~]# mount /dev/sdb1 /newFS
[root@edenluo.com ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 974M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
/dev/sda1 1014M 152M 863M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/sdb1 2.0G 47M 2.0G 3% /newFS
6、查看和验证分区
du命令用查看分区或目录所占用的磁盘容量大小,英文全称为“disk usage”,语法格式为“du -sh目录名称”。
既然存储设备已经顺利挂载,接下来就可以尝试通过挂载点目录向存储设备中写入文件了。在写入文件之前,先来看一个用于查看文件数据占用量的du命令。简单来说,该命令就是用来查看一个或多个文件占用了多大的硬盘空间。
Linux系统中可以使用du -sh /*命令来查看在Linux系统根目录下所有一级目录分别占用的空间大小,在1s之内就能找到哪个目录占用的空间最多:
[root@edenluo.com ~]# df -Th
先从某些目录中复制过来一批文件,然后查看这些文件总共占用了多大的容量:
[root@edenluo.com ~]# cp -rf /etc/* /newFS
[root@edenluo.com ~]# ls /newFS
adjtime hostname profile.d
aliases hosts protocols
alsa hosts.allow pulse
alternatives hosts.deny qemu-ga
anacrontab hp qemu-kvm
asound.conf idmapd.conf radvd.conf
………………省略部分输入信息………………
[root@edenluo.com ~]# du -sh /newFS
39M /newFS/
7、实现永久(开机)挂载
- 如果想让这个设备文件的挂载永久有效,则需要把挂载的信息写入/etc/fstab配置文件中
1、方法一,文件挂载
[root@edenluo.com ~]# vim /etc/fstab #开机前检测的文件,如果磁盘异常会影响开机启动,无法正常启动
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
2、挂载生效
[root@localhost ~]# mount –a #自动挂载/etc/fstab文件中没有挂载的文件
- 解释:
/dev/sdc2 | /root/xfs | xfs | defaults | 0 | 0 |
---|---|---|---|---|---|
要挂载的分区设备 | 挂载点 | 文件系统类型 | 挂载选项 | 是否备份 | 是否检测 |
/etc/rc.d/rc.local 系统启动完成后检查的文件,是添加开机启动项的配置, (文件必须给执行权限才可以生效)
mount /dev/sdb1 /data
2、方法二(UUID挂载)
1、查看分区的UUID
[root@localhost ~]# blkid
/dev/sdc2: UUID="4d0f543c-0b56-48e9-a252-05f4031a8887" TYPE="xfs"
/dev/sda1: UUID="855a2439-afad-4943-aa2f-fc1c8e1caba5" TYPE="xfs"
/dev/sda2: UUID="76aa7e90-e32e-4d3a-8ead-20da21664365" TYPE="swap"
/dev/sda3: UUID="dec77a47-26dd-4686-a209-66c35dbc9395" TYPE="xfs"
/dev/sdb1: UUID="2961bf24-6f30-4f55-947f-faa56491c09e" TYPE="xfs"
/dev/sr0: UUID="2018-10-10-18-34-13-00" LABEL="RHEL-7.6 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
2、将UUID追加到配置文件中
[root@localhost ~]# echo "UUID=4d0f543c-0b56-48e9-a252-05f4031a8887 /root/xfs defaults 0 0" >> /etc/fstab
3、挂载生效
[root@localhost ~]# mount –a #自动挂载/etc/fstab文件中没有挂载的文件
- 解释:/etc/fastb中参数解释
UUID="xxx“ | /root/xfs | xfs | defaults | 0 | 0 |
---|---|---|---|---|---|
要挂载的分区设备uuid | 挂载点 | 文件系统类型 | 挂载选项 | 是否备份 | 是否检测 |
第四列
Async/sync | 设置是否为同步方式运行,默认为async |
---|---|
auto/noauto | 当执行****mount -a 的命令时,此文件系统是否被主动挂载。默认为****auto |
rw/ro | 是否以以只读或者读写模式挂载 |
exec/noexe | 限制此文件系统内是否能够进行"执行"的操作 |
user/nouser | 是否允许用户使用mount命令挂载 |
suid/nosuid | 是否允许SUID的存在 |
Usrquota | 启动文件系统支持磁盘配额模式 |
Grpquota | 启动文件系统对群组磁盘配额模式的支持 |
Defaults | 同时具有****rw,suid,dev,exec,auto,nouser,async等默认参数的设置 samba nfs |
第五列
0 | 代表不要做备份 |
---|---|
1 | 代表要每天进行操作 |
2 | 代表不定日期的进行操作 |
第六列
0 | 不要检验 |
---|---|
1 | 最早检验(一般根目录会选择) |
2 | 1级别检验完成之后进行检验 |
如果对伙伴们有帮助,感谢关注支持**「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。