存储结构与磁盘划分
1. 常见目录名称及对应内容
2. 物理设备的命名规则
概念性原理:
而硬盘设备是由大量的扇区组成的,每个扇区的容量为 512字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用 446字节,分区表为 64字节,结束符占用 2字节;其中分区表中每记录一个分区信息就需要 16字节,这样 一来最多只有 4个分区信息可以写到第一个扇区中,这 4个分区就是 4个主分区。第一个扇区中的数据信息如图 所示。
为什么第一个扇区最多只能创建出 4个分区?于是为了解决分区个数不够
的问题,可以将第一个扇区的分区表中 16字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像
是一个占用 16字节分区表空间的指针 一个指向另外一个分区的指针。这一来, 用户 一般会选择使用 3个主分区加 1个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于 4个)的需求。当然,就目前来讲大家只要明白为什么主分区不能超过 4个就足够了。主分区、扩展分区、逻辑分区可以像图 6-4那样来规划。
总结:
硬件设备(fdisk进行分区)–》分区(mkfs进行格式化)–》格式化后的文件系统–》挂载(mount)–》df -h命令来查看挂载状态和硬盘使用量信息。–》写入fstab永久挂载
3.挂载硬件设备
3.1 mount与umount
mount命令用于挂载文件系统,格式为“ mount 文件系统 挂载目录”。
常用:mount -a 挂载所有在/etc/fstab中定义的文件系统
但是这样子只是暂时的挂载,重启后就会失效,所以要将挂载信息写在/etc/fstab才能永久挂载
格式:“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检 ”
umount命令用于撤销已经挂载的设备文件,格式为“ umount [挂载点 /设备文件 ]”。
我们挂载文件系统的目的是为了使用硬件资源,而卸载文件系统就意味不再使用硬件的设备资源;相对应地,挂载操作就是把硬件设备与目录进行关联的动作,因此卸载操作只需要说明想要取消关联的设备文件或挂载目录的其中一项即可
3.2 fdisk命令
fdisk命令用于管理磁盘分区,格式为“ fdisk [磁盘名称 ]”,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。
3.3 du命令
du命令,其格式为“ du [选项 ] [文件 ]”。用于查看文件数据占用量。简单来说,该命令就是用来查看一个或多个文件占用了多大的硬盘空间。我们还可以使用 du -sh /*命令来查看在 Linux系统根目录下所有一级目录分别占用的空间大小。
[root@server12 ~]# mkdir /newfs
[root@server12 ~]# cp -rf /etc/* /newfs/
[root@server12 ~]# du -sh /newfs/
30M /newfs/
3.4 示例
[root@server12 ~]# fdisk /dev/sd
/dev/sda /dev/sdb
[root@server12 ~]# 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 0xac22f991.
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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: 0xac22f991
Device Boot Start End Blocks Id System
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +2G
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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: 0xac22f991
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@server12 ~]#
[root@server12 ~]# partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
[root@server12 ~]# file /dev/sdb1
/dev/sdb1: block special
[root@server12 ~]#
[root@server12 ~]#
格式化并挂载
[root@server12 ~]# mkfs.
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.xfs
mkfs.cramfs mkfs.ext3 mkfs.minix
[root@server12 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
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@server12 ~]# mount /dev/sdb1 /newfs/
[root@server12 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 8.0G 1.5G 6.6G 19% /
devtmpfs 902M 0 902M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.6M 904M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 1014M 139M 876M 14% /boot
tmpfs 183M 0 183M 0% /run/user/0
/dev/sdb1 2.0G 33M 2.0G 2% /newfs
[root@server12 ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Oct 24 12:55:03 2019
#
# 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
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=1d26f703-cec1-4699-9508-ec2425aeed3d /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/sdb1 /newfs xfs 0 0
4.添加交换分区
[root@server12 ~]# 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.
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (4196352-20971519, default 4196352):
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-20971519, default 20971519): +2G
Partition 2 of type Linux and of size 2 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
格式化mkswap并挂载
[root@server12 ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=0a58fcce-74e0-4876-805d-3def68ae3e81
[root@server12 ~]# free -m
total used free shared buff/cache available
Mem: 1823 130 1505 8 186 1510
Swap: 1023 0 1023
[root@server12 ~]# swapon /dev/sdb2
[root@server12 ~]# free -m
total used free shared buff/cache available
Mem: 1823 132 1504 8 186 1509
Swap: 3071 0 3071
[root@server12 ~]# vim /etc/fstab
/dev/sdb2 swap swap defaults 0 0
5.磁盘容量配额
quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。 quota命令还 有软限制和硬限制的功能。
软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
接下来创建一个用于检查quota磁盘容量配额效果的用户 xiaojuanmao,并针对 /boot目录增加其他人的写权限,保证用户能够正常写入数据:
[root@server12 ~]# chmod -Rf o+w /boot/
5.1 xfs quota 命令
xfs quota命令是一个专门针对 XFS文件系统来管理 quota磁盘容量配额服务而设计的命令,格式为“ xfs_quota [参数 ] 配额 文件系统”。其中, ,-c参数用于以参数的形式设置要执行的命令;-x参数是专家模式,让运维人员能够对 quota服务进行更多复杂的配置。
使用 xfs quota命令来设置用户xiaojuanmao对 /boot目录的 quota磁盘容量配额。具体的限额控制包括:硬盘使用量的软限制和硬限制分别为 3MB和 6MB;创建文件数量的软限制和硬限制分别为 3个和 6个。
[root@server12 ~]# vim /etc/fstab
UUID=1d26f703-cec1-4699-9508-ec2425aeed3d /boot xfs defaults,uquota 0 0
###需要在加一个uquota的参数
[root@server12 ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 xiaojuanmao' /boot
[root@server12 ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 108464 0 0 00 [--------]
xiaojuanmao 0 3072 6144 00 [--------]
切换用户测试:当配置好上述的各种软硬限制后,尝试切换到这个普通用户,然后分别尝试创建一个体积为 5MB和 8MB的文件。可以发现,在创建 8MB的文件时受到了系统限制:
[xiaojuanmao@server12 ~]$ dd if=/dev/zero of=/boot/xiaojuanmao bs=5M count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB) copied, 0.00422863 s, 1.2 GB/s
[xiaojuanmao@server12 ~]$ dd if=/dev/zero of=/boot/xiaojuanmao bs=8M count=1
dd: error writing ‘/boot/xiaojuanmao’: Disk quota exceeded
1+0 records in
0+0 records out
6291456 bytes (6.3 MB) copied, 0.0151422 s, 415 MB/s
5.2 edquota 命令
edquota命令用于编辑用户的 quota配额限制,格式为“ edquota [参数 ] [用户 ] ”。在为用户设置了 quota磁盘容量配额限制后,可以使用 edquota命令按需修改限额的数值。其中, ,-u参数表示要针对哪个用户进行设置; ;-g参数表示要针对哪个用户组进行设置。 edquota命令会调用 Vi或 Vim编辑器来让 root管理员修改要限制的具体细节。
-u 设置用户的磁盘配额,这是预设的参数。
-g 设置群组的磁盘配额。
-p<源用户名称> 将源用户的磁盘配额设置套用至其他用户或群组。
-t 设置宽限期限。
下面把用户 xiaojuanmao的硬盘使用量的硬限额从 5MB提升到 8MB
备注:如果提示 edquota 没有此命令,安装 quota 包;
[root@server12 ~]# yum install -y quota
[root@server12 ~]# quotaon /dev/sda1
quotaon: Enable XFS group quota accounting during mount
quotaon: Enforcing user quota already on /dev/sda1
[root@server12 ~]# edquota -u xiaojuanmao
Disk quotas for user xiaojuanmao (uid 1005):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 6144 3072 8192 1 3 6
[xiaojuanmao@server12 ~]$ dd if=/dev/zero of=/boot/xiaojuanmao bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB) copied, 0.0229054 s, 366 MB/s
quotaon 命令
开启指定文件系统的配额功能;也适用于 xfs文件系统;
例如: quotaon /dev/sdb1
quotaoff命令
关闭指定文件系统的配额功能;也适用于 xfs文件系统;
例如: quotaoff /dev/sdb1
6.软硬方式链接
硬链接(hard link):可以将它理解为一个“指向原始文件 inode的指针”,系统不为它分配独立的 inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 inode连接数就会增加 1;而且只有当该文件的 inode连接数为 0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件 inode的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨 分区对 目录文件进行链接。
软链接(也称为符号链接【symbolic link】)仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与 Windows系统中的“快捷方式”具有一样的性质。
ln命令
ln命令用于创建链接文件,格式为“ ln [选项 ] 目标”,其可用的参数以及作用如表
为了更好地理解软链接、硬链接的不同性质,接下来创建一个类似于Windows系统中快捷方式的软链接。这样,当原始文件被删除后,就无法读取新建的链接文件了。
[root@server12 ~]# echo "welcome to xiaojuanmao com" >readme.txt
[root@server12 ~]# ln -s readme.txt readit.txt
### 创建软链接
[root@server12 ~]# cat readme.txt
welcome to xiaojuanmao com
[root@server12 ~]# cat readit.txt
welcome to xiaojuanmao com
[root@server12 ~]# ls -l readme.txt
-rw-r--r--+ 1 root root 27 May 2 03:21 readme.txt
###查看链接是否成功,注意看此时原始文件的链接数为1
[root@server12 ~]# rm -f readme.txt
[root@server12 ~]# cat readit.txt
cat: readit.txt: No such file or directory
###删除原始文件后链接文件不能继续访问
接下来针对一个原始文件创建一个硬链接,即相当于针对原始文件的硬盘存储位置创建了一个指针,这样一 来,新创建的这个硬链接就不再依赖于原始文件的名称等信息,也不会因为原始文件的删除而导致无法读取。同时可以看到创建硬链接后,原始文件的硬盘链接数量增加到了 2。
[root@server12 ~]# echo "welcome to xiaojuanmao world" >readme.txt
[root@server12 ~]# ln readme.txt readit.txt
[root@server12 ~]# cat readme.txt
welcome to xiaojuanmao world
[root@server12 ~]# cat readit.txt
welcome to xiaojuanmao world
###创建硬链接
[root@server12 ~]# ls -l readme.txt
-rw-r--r--. 2 root root 29 May 2 03:29 readme.txt
[root@server12 ~]# rm -rf readme.txt
[root@server12 ~]# cat readit.txt
welcome to xiaojuanmao world
###删除源文件之后还是可以继续访问链接文件