Search K
Appearance
Appearance
C、D、E、F 等盘符,Linux 系统中的一切文件都是从 "根" 目录(/)开始的,并按照文件系统层次标准(FHS)采用倒树状结构来存放文件,以及定义了常见目录的用途。root、rOOt、Root、rooT 均代表不同的目录,并且文件名称中不得包含斜杠(/)。
| 目录名称 | 应放置文件的内容 |
|---|---|
/boot | 开机所需文件—内核、开机菜单以及所需配置文件等 |
/dev | 以文件形式存放任何设备与接口 |
/etc | 配置文件 |
/home | 用户主目录 |
/bin | 存放单用户模式下还可以操作的命令 |
/lib | 开机时用到的函数库,以及 /bin 与 /sbin 下面的命令要调用的函数 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设备文件的目录 |
/opt | 放置第三方的软件 |
/root | 系统管理员的家目录 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的 "共享" 临时目录 |
/proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux 系统开机时不会使用到的软件/命令/脚本 |
/usr/share | 帮助与说明文件,也可放置共享文件 |
/var | 主要存放经常变化的文件,如日志 |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
路径:如何定位到某个文件,分为绝对路径与相对路径。
/)开始写起的文件或目录名称。 应包括磁盘驱动器、适配器及盘片,它们既可以作为输入设备,也可作为输出设备或称载体。控制软盘读和写,即输入或输出是由磁盘驱动器及其适配器来完成的,从功能上来说,一台磁盘设备与一台录放机的作用是相同的,一盘录音带可反复地录音,那么软盘片或硬盘片,或称信息载体,也可以反复地被改写。
/dev/hdX,其中 X 代表硬盘的小写字母标识符,例如 /dev/hda 表示系统上的第一个 IDE 设备, /dev/hdb 表示第二个 IDE 设备,以此类推。每个 IDE 设备的编号显示在启动 BIOS 信息中,因此你可以在系统启动时查看。如果系统上只有一块 IDE 硬盘,则其设备名称应该是 /dev/hda。/dev/sdX,其中 X 代表 SCSI 设备的字母标识符,例如 /dev/sda 表示系统上的第一个 SCSI 设备, /dev/sdb 表示第二个 SCSI 设备,以此类推。SCSI 设备通常具有多个分区,这些分区可以使用类似 /dev/sda1 这样的命名方案来命名。/dev/sdX,其中 X 是字母 a、b、c 等表示不同的硬盘。/media 目录下,并分配名称为 /media/username/usbname 的挂载点。然后可以使用命令 mount 或 umount 挂载或卸载 U 盘。/dev/fd0 或 /dev/fd1,分别代表第一块和第二块软盘设备。| 硬件设备 | 文件名称 |
|---|---|
| IDE 设备 | /dev/hd[a-d] |
| SCSI/SATA/U 盘 | /dev/sd[a-z] |
| virtio 设备 | /dev/vd[a-z] |
| 软驱 | /dev/fd[0-1] |
| 打印机 | /dev/lp[0-15] |
| 光驱 | /dev/cdrom |
| 鼠标 | /dev/mouse |
| 磁带机 | /dev/st0 或 /dev/ht0 |
/dev/sd 开头。而一台主机上可以有多块硬盘,因此系统采用 a ~ z 来代表 26 块不同的硬盘(默认从 a 开始分配),而且硬盘的分区编号也很有讲究: /dev 目录中 sda 设备之所以是 a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为 /dev/sda。大家以后在使用 iSCSI 网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到 /dev/sdb 这个设备—就是这个道理。sda3 只能表示是编号为 3 的分区,而不能判断 sda 设备上已经存在了 3 个分区。
/dev/sda5 表示的就是 这是系统中第一块被识别到的硬件设备中分区编号为 5 的逻辑分区的设备文件
/dev/hdc8:这是第 3 块 IDE 设备(现在比较少见)中编号为 8 的逻辑分区。 hda、hdb、hdc 等,其中从 hda 开始递增编号。因此,/dev/hdc 表示的就是 IDE 接口上的第 3 个硬盘。/dev/hdc8 表示 IDE 接口的第 3 个硬盘(hdc)的第 8 个分区。
注意
所谓扩展分区,严格地讲它不是一个实际意义的分区,而仅仅是一个指向其他分区的指针,这种指针结构将形成一个单向链表。因此扩展分区自身不能存储数据,用户需要在其指向的对应分区(称之为逻辑分区)上进行操作。
文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。
INFO
文件的实际内容则保存在 block 块中(大小一般是 1KB、2KB 或 4KB),一个 inode 的默认大小仅为 128 字节,记录一个 block 则消耗 4 字节。
当文件的 inode 被写满后,Linux 系统会自动分配出一个 block,专门用于像 inode 那样记录其他 block 块的信息,这样把各个 block 块的内容串到一起,就能够让用户读到完整的文件内容了。
对于存储文件内容的 block 块,有下面两种常见的情况(以 4KB 大小的 block 为例进行说明):
计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux 内核中的软件层为用户程序提供了一个虚拟文件系统(Virtual File System,VFS)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。
cp 命令来复制文件)。
mount 命令用于挂载文件系统,格式为 mount 文件系统 挂载目录。挂载是在使用硬件设备前所执行的最后一步操作。
mount 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-a | 挂载所有在 /etc/fstab 中定义的文件系统 |
-t | 指定文件系统的类型 |
[root@linuxprobe ~]# mount /dev/sdb2 /backup # 把设备 /dev/sdb2 挂载到 /backup 目录blkid 命令用于显示设备的属性信息,英文全称为 block id,语法格式为 blkid [设备名]。sdb 就不太合适了。这时推荐用 UUID(Universally Unique Identifier,通用唯一识别码)进行挂载操作。 [root@linuxprobe ~]# blkid
/dev/sda1: UUID="73159c7d-b179-4ef9-a83f-3f6f6ce390ed" TYPE="xfs" PARTUUID="5fef684b-01"
/dev/sda2: UUID="oBY3nX-axGY-bavU-eCJf-1l8K-dpPW-Lgfm2K" TYPE="LVM2_member" PARTUUID="5fef684b-02"
/dev/sr0: UUID="2022-06-29-06-15-46-00" LABEL="RHEL-8-2-0-BaseOS-x86_64" TYPE="iso9660" PTUUID="72cfe76b" PTTYPE="dos"
/dev/mapper/rhel-root: UUID="34630964-7974-4d0a-a1cb-9686da83698c" TYPE="xfs"
/dev/mapper/rhel-swap: UUID="77b404e5-2bbb-45d4-8885-60a4d9318b17" TYPE="swap"
[root@linuxprobe ~]#
[root@linuxprobe ~]# mount UUID=oBY3nX-axGY-bavU-eCJf-1l8K-dpPW-Lgfm2K /backup # 有了设备的 UUID 值之后,就可以用它挂载网络设备执行 mount 命令后就能立即使用文件系统了,但系统在重启后挂载就会失效,也就是说需要每次开机后都手动挂载一下。
如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式 设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检 写入到 /etc/fstab 文件中。
用于挂载信息的指定填写格式中,各字段所表示的意义:
| 字段 | 意义 |
|---|---|
| 设备文件 | 一般为设备的路径 + 设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier) |
| 挂载目录 | 指定要挂载到的目录,需在挂载前创建好 |
| 格式类型 | 指定文件系统的格式,比如 Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等 |
| 权限选项 | 若设置为 defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async |
| 是否备份 | 若为 1 则开机后使用 dump 进行磁盘备份,为 0 则不备份 |
| 是否自检 | 若为 1 则开机后自动进行磁盘自检,为 0 则不自检 |
写入到 /etc/fstab 文件中的设备信息并不会立即生效,需要使用 mount -a 参数进行自动挂载。
对于网络存储设备,建议您在 fstab 文件挂载信息中加上 _netdev 参数。加上后系统会等联网成功后再尝试挂载这块网络存储设备,从而避免了开机时间过长或失败的情况。
[root@linuxprobe ~]# vim /etc/fstab
[root@linuxprobe ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Jun 4 03:05:37 2023
#
# 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=73159c7d-b179-4ef9-a83f-3f6f6ce390ed /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb2 /backup ext4 defaults 0 0
[root@linuxprobe ~]#
[root@linuxprobe ~]# vim /etc/fstab # 把光盘设备挂载到 /media/cdrom 目录中
[root@linuxprobe ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Jun 4 03:05:37 2023
#
# 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=73159c7d-b179-4ef9-a83f-3f6f6ce390ed /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb2 /backup ext4 defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
[root@linuxprobe ~]# mount -a # 写入到 /etc/fstab 文件中的设备信息并不会立即生效,需要使用 mount -a 参数进行自动挂载
[root@linuxprobe ~]#
[root@linuxprobe ~]# vim /etc/fstab # 对于网络存储设备,在 fstab 文件挂载信息中加上 `_netdev` 参数。加上后系统会等联网成功后再尝试挂载这块网络存储设备,从而避免了开机时间过长或失败的情况
[root@linuxprobe ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Jun 4 03:05:37 2023
#
# 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=73159c7d-b179-4ef9-a83f-3f6f6ce390ed /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb2 /backup ext4 defaults,_netdev 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
[root@linuxprobe ~]#df 命令用于查看已挂载的磁盘空间使用情况,英文全称为 disk free,语法格式为 df -h。-h 参数便捷地对存储容量进行 "进位" 操作。例如,在遇到 10240K 的时候会自动进位写成 10M,非常方便我们的阅读。[linuxprobe@linuxprobe ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 952M 0 952M 0% /dev
tmpfs 981M 0 981M 0% /dev/shm
tmpfs 981M 19M 962M 2% /run
tmpfs 981M 0 981M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 4.3G 13G 26% /
/dev/sda1 1014M 211M 804M 21% /boot
tmpfs 196M 1.2M 195M 1% /run/user/42
tmpfs 196M 4.6M 192M 3% /run/user/1000
/dev/sr0 7.9G 7.9G 0 100% /media/cdrom
tmpfs 196M 4.6M 192M 3% /run/user/0
[linuxprobe@linuxprobe ~]$umount 命令用于卸载设备或文件系统,英文全称为 un mount,语法格式为 umount [设备文件/挂载目录]。[root@linuxprobe ~]# cd /media/cdrom/
[root@linuxprobe cdrom]# umount /dev/cdrom # 当前就处于设备所挂载的目录,系统会提示该设备繁忙
umount: /media/cdrom: target is busy.
[root@linuxprobe cdrom]# cd ~
[root@linuxprobe ~]# umount /dev/cdrom # 退出到其他目录后再尝试一次就行了
[root@linuxprobe ~]#lsblk 命令用于查看系统的磁盘使用情况,英文全称为 list block devices 的缩写,语法格式:lsblk [参数]。
lsblk 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-a, --all | 显示所有设备。 |
-b, --bytes | 以 bytes 方式显示设备大小。 |
-d, --nodeps | 不显示 slaves 或 holders。 |
-D, --discard | print discard capabilities。 |
-e, --exclude <list> | 排除设备 (default: RAM disks)。 |
-f, --fs | 显示文件系统信息。 |
-h, --help | 显示帮助信息。 |
-i, --ascii | use ascii characters only。 |
-m, --perms | 显示权限信息。 |
-l, --list | 使用列表格式显示。 |
-n, --noheadings | 不显示标题。 |
-o, --output <list> | 输出列。 |
-P, --pairs | 使用 key="value" 格式显示。 |
-r, --raw | 使用原始格式显示。 |
-t, --topology | 显示拓扑结构信息。 |
7 个栏目名称如下:
NAME:这是块设备名。MAJ:MIN:本栏显示主要和次要设备号。RM:本栏显示设备是否可移动设备。注意,在本例中设备 sdb 和 sr0 的 RM 值等于 1,这说明他们是可移动设备。SIZE:本栏列出设备的容量大小信息。例如 298.1G 表明该设备大小为 298.1GB,而 1K 表明该设备大小为 1KB。RO:该项表明设备是否为只读。在本案例中,所有设备的 RO 值为 0,表明他们不是只读的。TYPE:本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda 和 sdb 是磁盘,而 sr0 是只读存储(rom)。MOUNTPOINT:本栏指出设备挂载的挂载点。[linuxprobe@linuxprobe ~]$ lsblk -a
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 7.9G 0 rom /media/cdrom
[linuxprobe@linuxprobe ~]$选择硬盘设备类型
SATA,并单击 "下一步" 按钮,如图 3 所示。这样虚拟机中的设备名称过一会儿后应该为 /dev/sdb。
设置硬盘的最大使用空间


udev 服务命名规则,第二个被识别的 SATA 设备应该会被保存为 /dev/sdb,这个就是硬盘设备文件了。[linuxprobe@linuxprobe ~]$ lsblk -a # 新添加的硬盘为 sdb
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]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 7.9G 0 rom /media/cdrom
[linuxprobe@linuxprobe ~]$fdisk 命令用于新建、修改及删除磁盘的分区表信息,英文全称为 format disk,语法格式为 fdisk 磁盘名称。
在 Linux 系统中,管理硬盘设备最常用的方法就当属 fdisk 命令了。它提供了集添加、删除、转换分区等功能于一身的 "一站式分区服务" 。
fdisk 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
m | 查看全部可用的参数 |
n | 添加新的分区 |
d | 删除某个分区信息 |
l | 列出所有可用的分区类型 |
t | 改变某个分区的类型 |
p | 查看分区表信息 |
w | 保存并退出 |
q | 不保存直接退出 |
[linuxprobe@linuxprobe ~]$ su - root
Password:
[root@linuxprobe ~]# fdisk /dev/sdb # 使用 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 0x67e306b2.
Command (m for help): m # 输入参数 m 查看全部可用的参数
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
Command (m for help): p # 输入参数 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: 0x67e306b2
Command (m for help): n # 输入参数 n 尝试添加新的分区
Partition type
p primary (0 primary, 0 extended, 4 free) # 输入参数 p 来创建主分区
e extended (container for logical partitions) # 输入参数 e 来创建扩展分区
Select (default p): p
Partition number (1-4, default 1): 1 # 输入主分区的编号,主分区的编号范围是 1~4,因此这里输入默认的 1 就可以了
First sector (2048-41943039, default 2048): # 定义起始的扇区位置,这不需要改动,敲击回车键保留默认设置即可,系统会自动计算出最靠前的空闲扇区的位置。
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +2G # 定义分区的结束扇区位置,这其实就是要去定义整个分区的大小是多少。我们不用去计算扇区的个数,只需要输入 +2G 即可创建出一个容量为 2GB 的硬盘分区。
Created a new partition 1 of type 'Linux' and of size 2 GiB.
Command (m for help): p # 输入参数 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: 0x67e306b2
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.
[root@linuxprobe ~]# 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.
Command (m for help): l # 使用 l 参数查看一下磁盘编码都有哪些 (82 Linux swap)
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
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@linuxprobe ~]#
[root@linuxprobe ~]# lsblk -a # Linux 系统会自动把这个硬盘主分区抽象成 /dev/sdb1 设备文件
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]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 2G 0 part
sr0 11:0 1 7.9G 0 rom /media/cdrompartprobe 命令用于在不重启的情况下重读分区表。当出现删除文件后,出现仍然占用空间,可以 partprobe 在不重启的情况下重读分区。
partprobe 英文全称为 partition probe,语法格式为 partprobe [参数] [设备名]。
partprobe 命令功能是用于重读分区表信息。将磁盘分区表变化信息通知给系统内核,请求操作系统重新加载分区表,有时当我们创建或删除分区设备后,系统并不会立即生效,这时就需要使用 partprobe 命令在不重启的情况下重新读取分区表信息,使得新设备信息被同步。
partprobe 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-d | 不更新内核 |
-h | 显示帮助信息 |
-l | 显示分区信息 |
-s | 显示摘要和分区信息 |
-t | 设置分区类型 |
-v | 显示版本信息 |
INFO
[root@linuxprobe ~]# file /dev/sdb1 # 使用 file 命令查看该文件的属性
/dev/sdb1: cannot open `/dev/sdb1' (No such file or directory)
[root@linuxprobe ~]# partprobe
[root@linuxprobe ~]# partprobe
[root@linuxprobe ~]# file /dev/sdb1
/dev/sdb1: block special (8/17)
[root@linuxprobe ~]#对存储设备进行分区后还需要进行格式化操作。
mkfs 命令英文全称为 make file system ,其功能是用于对设备进行格式化文件系统操作,语法格式为 mkfs [参数] 设备名。mkfs 名后再敲击两下用于补齐命令的 Tab 键,mkfs 命令很贴心地把常用的文件系统名称用后缀的方式保存成了多个命令文件,用起来也非常简单 — mkfs.文件类型名称。 mkfs.xfs /dev/sdb1。[root@linuxprobe ~]# 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
[root@linuxprobe ~]#完成了存储设备的分区和格式化操作,接下来就是要来挂载并使用存储设备了。
mount 命令将存储设备与挂载点进行关联;df -h 命令来查看挂载状态和硬盘使用量信息。[root@linuxprobe ~]# mkdir /newFS # 创建挂载点目录
[root@linuxprobe ~]# mount /dev/sdb1 /newFS # 将存储设备与挂载点进行关联
[root@linuxprobe ~]# df -h # 查看挂载状态和硬盘使用量信息
Filesystem Size Used Avail Use% Mounted on
devtmpfs 952M 0 952M 0% /dev
tmpfs 981M 0 981M 0% /dev/shm
tmpfs 981M 9.5M 971M 1% /run
tmpfs 981M 0 981M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 4.3G 13G 25% /
/dev/sr0 7.9G 7.9G 0 100% /media/cdrom
/dev/sda1 1014M 211M 804M 21% /boot
tmpfs 196M 3.4M 193M 2% /run/user/1000
/dev/sdb1 2.0G 47M 2.0G 3% /newFS
[root@linuxprobe ~]#du 命令用查看分区或目录所占用的磁盘容量大小,英文全称为 disk usage,语法格式为 du -sh 目录名称。du -sh /* 命令来查看在 Linux 系统根目录下所有一级目录分别占用的空间大小,在 1s 之内就能找到哪个目录占用的空间最多。[root@linuxprobe ~]# du -sh /*
20K /backup.acl
0 /bin
171M /boot
0 /dev
30M /etc
9.3M /home
0 /lib
0 /lib64
8.0G /media
0 /mnt
0 /newFS
0 /opt
0 /proc
8.4M /root
9.5M /run
0 /sbin
0 /srv
0 /sys
52K /tmp
3.8G /usr
191M /var
[root@linuxprobe ~]# cp -rf /etc/* /newFS
[root@linuxprobe ~]# du -sh /newFS/
30M /newFS/
[root@linuxprobe ~]#
[root@linuxprobe ~]# vim /etc/fstab # 想让这个设备文件的挂载永久有效,则需要把挂载的信息写入 fstab 配置文件中
[root@linuxprobe ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Jun 4 03:05:37 2023
#
# 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=73159c7d-b179-4ef9-a83f-3f6f6ce390ed /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb2 /backup ext4 defaults,_netdev 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
[root@linuxprobe ~]#与前文讲到的挂载并使用存储设备的过程非常相似。在对 /dev/sdb 存储设备进行分区操作前,有必要先说一下交换分区的划分建议:在生产环境中,交换分区的大小一般为真实物理内存的 1.5 ~ 2 倍。
[root@linuxprobe ~]# fdisk /dev/sdb # 使用 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.
Command (m for help): n # 添加新分区
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p # 设置为主分区
Partition number (2-4, default 2): # 设置分区编号,默认
First sector (4196352-41943039, default 4196352): # 扇区起始位置,默认
Last sector, +sectors or +size{K,M,G,T,P} (4196352-41943039, default 41943039): +5G # 容量为 5GB
Created a new partition 2 of type 'Linux' and of size 5 GiB.
Command (m for help): l # 查看磁盘编码 (82 Linux swap)
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
Command (m for help): t # 改变分区类型
Partition number (1,2, default 2): 2 # 选择刚才创建的分区
Hex code (type L to list all codes): 82 # 设置为 swap 分区
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
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: 0x67e306b2
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
/dev/sdb2 4196352 14682111 10485760 5G 82 Linux swap / Solaris
Command (m for help): w # 保存分区信息并退出
The partition table has been altered.
Syncing disks.
[root@linuxprobe ~]#mkswap 命令用于对新设备进行交换分区格式化,英文全称为 make swap,语法格式为 mkswap 设备名称。[root@linuxprobe ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 5 GiB (5368705024 bytes)
no label, UUID=e4fe2da9-c060-495c-a55c-2c4978e8efa0swapon 命令用于激活新的交换分区设备,英文全称为 swap on,语法格式为 swapon 设备名称。swapon 命令把准备好的 SWAP 硬盘设备正式挂载到系统中。可以使用 free -m 命令查看交换分区的大小变化。swapon -s (等价于 cat /proc/swaps)查看当前的 swap 空间。[root@linuxprobe ~]# swapon -s # 查看当前的 swap 空间
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 1292 -2
[root@linuxprobe ~]# free -m # 使用 free -m 命令查看交换分区的大小变化
total used free shared buff/cache available
Mem: 1960 1026 69 12 863 738
Swap: 2047 1 2046
[root@linuxprobe ~]#
[root@linuxprobe ~]# swapon /dev/sdb2 # 使用 swapon 命令把准备好的 swap 硬盘设备正式挂载到系统中
[root@linuxprobe ~]# free -m
total used free shared buff/cache available
Mem: 1960 1030 65 12 864 733
Swap: 7167 1 7166
[root@linuxprobe ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 1292 -2
/dev/sdb2 partition 5242876 0 -3
[root@linuxprobe ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 1292 -2
/dev/sdb2 partition 5242876 0 -3为了能够让新的交换分区设备在重启后依然生效,需要按照下面的格式将相关信息写入 fstab 配置文件中。
[root@linuxprobe ~]# vim /etc/fstab
[root@linuxprobe ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Jun 4 03:05:37 2023
#
# 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=73159c7d-b179-4ef9-a83f-3f6f6ce390ed /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb2 /backup ext4 defaults,_netdev 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
[root@linuxprobe ~]#/boot)能够支持 quota 磁盘配额技术。 usrquota 参数,而 RHEL 7/8 系统使用的则是 uquota 参数。[root@linuxprobe ~]# vim /etc/fstab
[root@linuxprobe ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Jun 4 03:05:37 2023
#
# 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=73159c7d-b179-4ef9-a83f-3f6f6ce390ed /boot xfs defaults,uquota 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb2 /backup ext4 defaults,_netdev 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
[root@linuxprobe ~]#在重启系统后使用 mount 命令查看,即可发现 /boot 目录已经支持 quota 磁盘配额技术了:
[linuxprobe@linuxprobe ~]$ mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)
[linuxprobe@linuxprobe ~]$xfs_quota 命令用于管理设备的磁盘容量配额,语法格式为 xfs_quota [参数] 配额 文件系统。-c 参数用于以参数的形式设置要执行的命令;-x 参数是专家模式,让运维人员能够对 quota 服务进行更多复杂的配置。xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 jaime' /boot/boot 目录的 quota 磁盘容量配额。[root@linuxprobe ~]# useradd jaime # 创建一个用于检查 quota 磁盘容量配额效果的用户 jaime
[root@linuxprobe ~]# chmod -R o+w /boot # 针对 /boot 目录增加其他人的写权限,保证用户能够正常写入数据
[root@linuxprobe ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 jaime' /boot # 设置用户 jaime 对 /boot 目录的 quota 磁盘容量配额: 硬盘使用量的软限制和硬限制分别为 3MB 和 6MB;创建文件数量的软限制和硬限制分别为 3 个和 6 个。
[root@linuxprobe ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 174528 0 0 00 [--------]
jaime 0 3072 6144 00 [--------]
[root@linuxprobe ~]#当配置好上述各种软硬限制后,尝试切换到一个普通用户,然后分别尝试创建一个体积为 5MB 和 8MB 的文件。可以发现,在创建 8MB 的文件时受到了系统限制:
[root@linuxprobe ~]# su - jaime
[jaime@linuxprobe ~]$ cd /boot
[jaime@linuxprobe boot]$ dd if=/dev/zero of=/boot/jaime bs=5M count=1 # 5MB 文件创建成功
1+0 records in
1+0 records out
5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0324882 s, 161 MB/s
[jaime@linuxprobe boot]$ dd if=/dev/zero of=/boot/jaime bs=8M count=1 # 8MB 文件创建失败
dd: error writing '/boot/jaime': Disk quota exceeded
1+0 records in
0+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.0271308 s, 155 MB/sedquota 命令用于管理系统的磁盘配额,英文全称为 edit quota,语法格式为 edquota [参数] 用户名。
在为用户设置了 quota 磁盘容量配额限制后,可以使用 edquota 命令按需修改限额的数值。
-u 参数表示要针对哪个用户进行设置;-g 参数表示要针对哪个用户组进行设置。edquota 命令中可用的参数以及作用:
| 参数 | 作用 |
|---|---|
-u | 对某个用户进行设置 |
-g | 对某个用户组进行设置 |
-p | 复制原有的规则到新的用户/组 |
-t | 限制宽限期限 |
[jaime@linuxprobe boot]$ logout
[root@linuxprobe ~]# edquota -u jaime # 针对 jaime 用户进行设置(硬盘使用量的硬限额从 6MB/6144 提升到 8MB/8192)
Disk quotas for user jaime (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 4096 3072 8192 1 3 6
[root@linuxprobe ~]# su - jaime
[jaime@linuxprobe ~]$ cd /boot/
[jaime@linuxprobe boot]$ dd if=/dev/zero of=/boot/jaime bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB, 8.0 MiB) copied, 0.055455 s, 151 MB/s
[jaime@linuxprobe boot]$秒传 的效果,无须再多占用一份空间,也不用再漫长等待。| 文件名 | 描述 | 类型 | 原始大小(KB) | 实际占用空间(KB) |
|---|---|---|---|---|
| dickens | 狄更斯文集 | 英文原文 | 9953 | 9948 |
| mozilla | Mozilla 的 1.0 可执行文件 | 执行程序 | 50020 | 33228 |
| mr | 医用 resonanse 图像 | 图片 | 9736 | 9272 |
| nci | 结构化的化学数据库 | 数据库 | 32767 | 10168 |
| ooffice | Open Office.org 1.01 DLL | 可执行程序 | 6008 | 5640 |
| osdb | 基准测试用的 MySQL 格式示例数据库 | 数据库 | 9849 | 9824 |
| reymont | 瓦迪斯瓦夫·雷蒙特的书 | 6471 | 6312 | |
| samba | samba 源代码 | src 源码 | 21100 | 11768 |
| sao | 星空数据 | 天文格式的 bin 文件 | 7081 | 7036 |
| webster | 辞海 | HTML | 40487 | 40144 |
| xml | XML 文件 | HTML | 5220 | 2180 |
| x-ray | 透视医学图片 | 医院数据 | 8275 | 8260 |

[!details] 实验代码
把虚拟机关闭,添加一块容量为 20GB 的新 SATA 硬盘进来。
查看系统的磁盘使用情况。
bash[root@linuxprobe ~]# lsblk -a # 查看系统的磁盘使用情况 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] sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 2G 0 part └─sdb2 8:18 0 5G 0 part sdc 8:32 0 20G 0 disk sr0 11:0 1 7.9G 0 rom /media/cdrom [root@linuxprobe ~]# ls -l /dev/sdc # 查看新添加的 SATA 硬盘 brw-rw----. 1 root disk 8, 32 Jun 13 08:18 /dev/sdc1
2
3
4
5
6
7
8
9
10
11
12
13
14RHEL/CentOS 8 系统中默认已经启用了 VDO 技术。如果系统没有安装 VDO,用
dnf install kmod-kvdo vdo命令安装。bash[root@linuxprobe ~]# dnf install kmod-kvdo vdo # 安装 VDO Updating Subscription Management repositories. Unable to read consumer identity This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. Last metadata expiration check: 1:48:09 ago on Tue 13 Jun 2023 06:31:19 AM CST. Package kmod-kvdo-6.2.2.117-65.el8.x86_64 is already installed. Package vdo-6.2.2.117-13.el8.x86_64 is already installed. Dependencies resolved. Nothing to do. Complete!1
2
3
4
5
6
7
8
9
10使用 vdo 命令
vdo create --name=storage --device=/dev/sdc --vdoLogicalSize=200G来管理新添加进来的物理设备。依据红帽公司推荐的原则,20GB 硬盘将翻成 200GB 的逻辑存储。
- 其中 name 参数代表新的设备卷的名称;
- device 参数代表由哪块磁盘进行制作;
- vdoLogicalSize 参数代表制作后的设备大小。
bash[root@linuxprobe ~]# vdo create --name=storage --device=/dev/sdc --vdoLogicalSize=200G Creating VDO storage The VDO volume can address 16 GB in 8 data slabs, each 2 GB. It can grow to address at most 16 TB of physical storage in 8192 slabs. If a larger maximum size might be needed, use bigger slabs. Starting VDO storage Starting compression on VDO storage VDO instance 0 volume is ready at /dev/mapper/storage1
2
3
4
5
6
7
8查看新建卷的概述信息。在输出信息中包含了 VDO 卷创建的时间、主机名、版本、是否压缩 Compression 及是否删重 Deduplication 等关键信息。
bash[root@linuxprobe ~]# vdo status --name=storage VDO status: Date: '2023-06-13 08:19:50+08:00' Node: linuxprobe.com Kernel module: Loaded: true Name: kvdo Version information: kvdo version: 6.2.2.117 Configuration: File: /etc/vdoconf.yml ………………省略部分输出信息……………… write amplification ratio: 0.0 write policy: sync1
2
3
4
5
6
7
8
9
10
11
12
13
14格式化新建卷。
bash[root@linuxprobe ~]# mkfs.xfs /dev/mapper/storage # 格式化新建卷 meta-data=/dev/mapper/storage isize=512 agcount=4, agsize=13107200 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=52428800, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=25600, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=01
2
3
4
5
6
7
8
9
10
11挂载前同步分区表,对设备进行一次刷新操作,避免刚才的配置没有生效。
bash[root@linuxprobe ~]# udevadm settle1创建挂载点,挂载新建卷。
bash[root@linuxprobe ~]# mkdir /storage [root@linuxprobe ~]# mount /dev/mapper/storage /storage1
2查看设备的实际使用情况。
human-readable参数的作用是将存储容量自动进位,以人们更易读的方式输出
- 比如,显示 20G 而不是 20971520K
- 这里显示的 Size 是实际物理存储的空间大小(即 20.0GB 是硬盘的大小),查看逻辑存储空间使用
df -h命令。bash[root@linuxprobe ~]# vdostats --human-readable Device Size Used Available Use% Space saving% /dev/mapper/storage 20.0G 4.0G 16.0G 20% 99% [root@linuxprobe ~]# df -h # 查看逻辑存储空间 Filesystem Size Used Avail Use% Mounted on devtmpfs 952M 0 952M 0% /dev tmpfs 981M 0 981M 0% /dev/shm tmpfs 981M 9.5M 971M 1% /run tmpfs 981M 0 981M 0% /sys/fs/cgroup /dev/mapper/rhel-root 17G 4.3G 13G 25% / /dev/sr0 7.9G 7.9G 0 100% /media/cdrom /dev/sda1 1014M 219M 796M 22% /boot tmpfs 196M 3.4M 193M 2% /run/user/1000 /dev/mapper/storage 200G 1.5G 199G 1% /storage1
2
3
4
5
6
7
8
9
10
11
12
13
14复制文件,查看占用了多少容量,以及空间节省率 Space saving。
bash[root@linuxprobe ~]# ls -lh /media/cdrom/images/install.img # 查看要复制的文件的信息 -r--r--r--. 1 root root 532M Jun 29 2022 /media/cdrom/images/install.img [root@linuxprobe ~]# cp /media/cdrom/images/install.img /storage/ # 复制文件 [root@linuxprobe ~]# ls -lh /storage/install.img -r--r--r--. 1 root root 532M Jun 13 08:27 /storage/install.img [root@linuxprobe ~]# vdostats --human-readable # 查看占用了多少容量,以及空间节省率(Space saving) Device Size Used Available Use% Space saving% /dev/mapper/storage 20.0G 4.5G 15.5G 22% 15%1
2
3
4
5
6
7
8再次复制文件,查看占用了多少容量,以及空间节省率 Space saving。
- 可以看到原先 532MB 的文件基本不占容量,空间节省率从 15% 提升到了 54%
bash[root@linuxprobe ~]# cp /media/cdrom/images/install.img /storage/rhel.img [root@linuxprobe ~]# vdostats --human-readable Device Size Used Available Use% Space saving% /dev/mapper/storage 20.0G 4.5G 15.5G 22% 54%1
2
3
4查看设备 UUID。
bash[root@linuxprobe ~]# blkid /dev/mapper/storage /dev/mapper/storage: UUID="1f86fda9-e273-4894-acfe-08168f7d71f1" TYPE="xfs"1
2将设备设置成永久挂载生效,一直提供服务。使用
_netdev参数后系统会等联网成功后再尝试挂载这块网络存储设备,从而避免了开机时间过长或失败的情况。bash[root@linuxprobe ~]# vim /etc/fstab [root@linuxprobe ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Sun Jun 4 03:05:37 2023 # # 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=73159c7d-b179-4ef9-a83f-3f6f6ce390ed /boot xfs defaults,uquota 0 0 /dev/mapper/rhel-swap swap swap defaults 0 0 /dev/cdrom /media/cdrom iso9660 defaults 0 0 /dev/sdb2 /backup ext4 defaults,_netdev 0 0 /dev/cdrom /media/cdrom iso9660 defaults 0 0 /dev/sdb1 /newFS xfs defaults 0 0 /dev/sdb2 swap swap defaults 0 0 UUID=1f86fda9-e273-4894-acfe-08168f7d71f1 /storage xfs defaults,_netdev 0 01
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
指向原始文件 block 的指针,系统会创建出一个与原来一模一样的 inode 信息块。
ln 命令用于创建文件的软硬链接,英文全称为 link,语法格式为 ln [参数] 原始文件名 链接文件名。
ln 命令中可用的参数以及作用:
| 参数 | 作用 |
|---|---|
-s | 创建 "符号链接" (如果不带 -s 参数,则默认创建硬链接) |
-f | 强制创建文件或目录的链接 |
-i | 覆盖前先询问 |
-v | 显示创建链接的过程 |
[!details] 实验代码
创建文件。
bash[linuxprobe@linuxprobe ~]$ echo "Welcome to linuxprobe.com" > old.txt1创建软链接。
bash[linuxprobe@linuxprobe ~]$ ln -s old.txt new.txt1查看两文件。
bash[linuxprobe@linuxprobe ~]$ cat old.txt Welcome to linuxprobe.com [linuxprobe@linuxprobe ~]$ cat new.txt Welcome to linuxprobe.com [linuxprobe@linuxprobe ~]$ ls -ald old.txt new.txt lrwxrwxrwx. 1 linuxprobe linuxprobe 7 Jun 13 09:00 new.txt -> old.txt -rw-rw-r--. 1 linuxprobe linuxprobe 26 Jun 13 09:00 old.txt1
2
3
4
5
6
7删除原始文件,再次查看软链接文件。
bash[linuxprobe@linuxprobe ~]$ rm -f old.txt [linuxprobe@linuxprobe ~]$ ls -ald old.txt new.txt ls: cannot access 'old.txt': No such file or directory lrwxrwxrwx. 1 linuxprobe linuxprobe 7 Jun 13 09:00 new.txt -> old.txt1
2
3
4
[!details] 实验代码
创建文件。
bash[linuxprobe@linuxprobe ~]$ echo "Welcome to linuxprobe.com" > old.txt1创建硬链接,即相当于针对原始文件的硬盘存储位置创建了一个指针。
- 这样一来,新创建的这个硬链接就不再依赖于原始文件的名称等信息,也不会因为原始文件的删除而导致无法读取了。
bash[linuxprobe@linuxprobe ~]$ ln old.txt new.txt1查看两文件。
- 可以看到创建硬链接后,原始文件的硬盘链接数量增加到了 2,这个数字表示的是文件的 inode 信息块的数量。
bash[linuxprobe@linuxprobe ~]$ cat old.txt Welcome to linuxprobe.com [linuxprobe@linuxprobe ~]$ cat new.txt Welcome to linuxprobe.com [linuxprobe@linuxprobe ~]$ ls -ald old.txt new.txt -rw-rw-r--. 2 linuxprobe linuxprobe 26 Jun 13 09:07 new.txt -rw-rw-r--. 2 linuxprobe linuxprobe 26 Jun 13 09:07 old.txt1
2
3
4
5
6
7删除原始文件,再次查看硬链接文件。
bash[linuxprobe@linuxprobe ~]$ rm -f old.txt [linuxprobe@linuxprobe ~]$ ls -ald new.txt old.txt ls: cannot access 'old.txt': No such file or directory -rw-rw-r--. 1 linuxprobe linuxprobe 26 Jun 13 09:07 new.txt1
2
3
4
[!question]-
/home目录与/root目录内存放的文件有何相同点以及不同点? 这两个目录都是用来存放用户家目录数据的,但是,/root目录存放的是 root 管理员的家目录数据。
[!question]- 假如一个设备的文件名称为
/dev/sdb,可以确认它是主板第二个插槽上的设备吗? 不一定,因为设备的文件名称是由系统的识别顺序来决定的。
[!question]- 如果硬盘中需要 5 个分区,则至少需要几个逻辑分区? 可以选用创建 3 个主分区 +1 个扩展分区的方法,然后把扩展分区再分成 2 个逻辑分区,即有了 5 个分区。
[!question]-
/dev/sda5是主分区还是逻辑分区? 逻辑分区。
[!question]- 哪个服务决定了设备在
/dev目录中的名称?udev设备管理器服务。
[!question]- 用一句话来描述挂载操作。 当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是 "挂载" 。
[!question]- 在配置 quota 磁盘容量配额服务时,软限制数值必须小于硬限制数值么? 不一定,软限制数值可以小于等于硬限制数值。
[!question]- VDO 技术能够提升硬盘的物理存储空间么? 不可以,VDO 是通过压缩或删重操作来提高硬盘的逻辑空间大小。
[!question]- 若原始文件被改名,那么之前创建的硬链接还能访问到这个原始文件么? 可以。