[toc]

10-linux磁盘划分

一、物理设备的命名规则

1、设备文件

Linux系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。

系统内核中的udev设备管理器会自动把硬件名称规范起来。

udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。

Linux系统中常见的硬件设备的文件名称:

| 硬件设备 | 文件名称 |
| ————- | —————— |
| 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 |

2、命名规则

  • 系统采用a~p来代表16块不同的硬盘(默认从a开始分配)
  • 主分区或扩展分区的编号从1开始,到4结束
  • 逻辑分区从编号5开始

image

/dev/sda5表示的是:系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件

二 、文件系统

Linux系统支持数十种的文件系统,常见的文件系统:

  • Ext3:一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
  • Ext4:Ext3的改进版本,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
  • XFS:一种高性能的日志文件系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。

三、挂载硬件设备

1、什么是挂载?

当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。

2、mount命令

作用:命令用于挂载文件系统。

命令格式:mount 文件系统 挂载目录

选项参数

  • -a:挂载所有在/etc/fstab中定义的文件系统
  • -t:指定文件系统的类型
示例:将/dev/sda1挂截到/mnt/backup目录

① 先创建挂载目录/mnt/backup

[root@localhost /]# mkdir /mnt/backup

② 将/dev/sda1挂载到目录,然后查看文件内容

[root@localhost /]# mount /dev/sda1 /mnt/backup/
[root@localhost /]# ls /mnt/backup
config-3.10.0-1160.el7.x86_64                            initramfs-3.10.0-1160.el7.x86_64kdump.img
efi                                                      symvers-3.10.0-1160.el7.x86_64.gz
grub                                                     System.map-3.10.0-1160.el7.x86_64
grub2                                                    vmlinuz-0-rescue-ccfdbb5d095e4503b958bee3a4f76933
initramfs-0-rescue-ccfdbb5d095e4503b958bee3a4f76933.img  vmlinuz-3.10.0-1160.el7.x86_64
initramfs-3.10.0-1160.el7.x86_64.img

注意:执行mount命令后就能立即使用文件系统了,但是重启系统后挂截就会失效。

3、自动挂载

如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式,写入到/etc/fstab文件中。

写入格式:设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检

各字段含义:

  • 设备文件:一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier
  • 挂载目录:指定要挂载到的目录,需在挂载前创建好
  • 格式类型:指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)
  • 权限选项:若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
  • 是否备份:若为1则开机后使用dump进行磁盘备份,为0则不备份
  • 是否自检:若为1则开机后自动进行磁盘自检,为0则不自检
示例:将的硬件设备/dev/sda1在开机后自动挂载到/mnt/backup目录上,并保持默认权限且无需开机自检
/dev/sda1 /mnt/backup xfs default 0 0

image

重启电脑后查看,已自动进行了挂载

image

4、umount命令

作用:命令用于手动撤销已经挂载的设备文件

命令格式:umount [挂载点/设备文件]

示例:撤销已经挂载的/dev/sda1
[root@localhost /]# umount /dev/sda1 # 也可以是挂载点

注意:使用自动挂载的设备,使用挂截点卸载,否则无法卸载。

四、添加硬盘设备

linux中添加硬盘设备,需要添加入一块新的硬盘存储设备,然后再进行分区、格式化、挂载等操作,最后通过检查系统的挂载状态并真实地使用硬盘来验证硬盘设备是否成功添加。

1、添加硬盘设备

① 首先把虚拟机系统关机,稍等几分钟会自动返回到虚拟机管理主界面,然后单击“编辑虚拟机设置”选项,在弹出的界面中单击“添加”按钮,新增一块硬件设备

image

② 选择想要添加的硬件类型为“硬盘”,然后单击“下一步”按钮就可以了。

image

③ 选择虚拟硬盘的类型为SCSI(默认推荐),并单击“下一步”按钮

image

④ 选中“创建新虚拟磁盘”单选按钮,再次单击“下一步”按钮

image

⑤ 选择磁盘大小,默认即可,其它项默认即可

image

⑥ 磁盘文件名称与保存位置,默认即可,点击完成按钮

image

⑦ 添加好后就可以看到设备信息了。这里不需要做任何修改,直接单击“确认”按钮后就可以开启虚拟机了

image

按照前面讲的udev服务命名规则,第二个识别的磁盘设置会被保存为/dev/sdb,这个就是硬盘设备文件。

image

2、磁盘分区

管理硬盘设备最常用的方法就当属fdisk命令。

作用:管理磁盘分区,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”

命令格式:fdisk [磁盘名称]

fdisk命令的参数是交互式的,可以根据需求动态调整

| 参数 | 作用 |
| —- | ———————- |
| n | 添加新的分区 |
| d | 删除某个分区信息 |
| l | 列出所有可用的分区类型 |
| t | 改变某个分区的类型 |
| p | 查看分区表信息 |
| w | 保存并退出 |
| q | 不保存直接退出 |

示例:使用fdisk对新添加的硬盘进行分区管理

① 使用fdisk命令来尝试管理/dev/sdb硬盘设备,看到提示信息后输入参数p来查看硬盘设备内已有的分区信息,其中包括了硬盘的容量大小、扇区个数等信息

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x4cbd0483 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4cbd0483

   设备 Boot      Start         End      Blocks   Id  System

命令(输入 m 获取帮助):

② 输入参数n添加新的分区,然后根据提示输入p来创建主分区

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free) #主分区
   e   extended # 扩展分区
Select (default p): p # 输入p创建主分区

③ 提示输入分区编号,主分区的编号范围是1~4,因此这里输入默认的1就可以了。提示输入起始 扇区 ,Last 扇区,系统会自动计算,选择默认回车即可。

分区号 (1-4,默认 1):
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 1 已设置为 Linux 类型,大小设为 10 GiB

④ 使用参数p来查看硬盘设备中的分区信息,可看到已创建一个名为sdb1的主分区

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4cbd0483

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   83  Linux

⑤ 此时需按参数w后回车,这样分区信息才能写入成功

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

⑥ 经过上述步骤,Linux系统会自动把这个硬盘主分区抽象成/dev/sdb1设备文件,但有时候系统并没有自动把分区信息同步给Linux内核,可以输入partprobe命令手动将分区信息同步到内核,推荐执行两次。

[root@localhost ~]# partprobe
[root@localhost ~]# partprobe
[root@localhost ~]# file /dev/sdb1
/dev/sdb1: block special

3、格式化

如果想在新增加的分区设备上写入数据,就需要进行格式化操作。

命令:mkfs

提示:Shell终端中输入mkfs名后再敲击两下用于补齐命令的Tab键会出现:

[root@localhost ~]# mkfs
mkfs         mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs
mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat    

mkfs命令很贴心地把常用的文件系统名称用后缀的方式保存成了多个命令文件

示例:将分区/dev/sdb1进行格式化
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=655296 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621184, 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

4、挂载设备

① 创建挂载目录/mnt/sdb1

[root@localhost ~]# mkdir /mnt/sdb1

② 挂载设备,此处使用mount命令

[root@localhost ~]# mkdir /mnt/sdb1
[root@localhost ~]# mount /dev/sdb1 /mnt/sdb1
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/sdb1                 10G   33M   10G    1% /mnt/sdb1

五、添加交换分区

1、SWAP(交换)分区

SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。

格式化命令:mkswap

挂载命令:swapon

2、创建SWAP(交换)分区

在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍

注意分区时如果出现No free sectors available <br />,说明磁盘空间不足了,先删除原有分区,然后创建新分区

① 使用fdisk创建交换分区,具体过程参考磁盘分区

[root@localhost /]# umount /mnt/sdb1 

② 格式化交换分区

[root@localhost /]# mkswap /dev/sdb2
正在设置交换空间版本 1,大小 = 4999164 KiB
无标签,UUID=08128082-03a2-413e-a7ee-82f79044a174

③ 挂载交换分区,使用free-m命令查看交换分区的大小变化

[root@localhost /]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         759         371          21         688         891
Swap:          1023           0        1023
[root@localhost /]# swapon /dev/sdb2 
[root@localhost /]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         763         367          21         688         887
Swap:          5905           0        5905

交换分区已经从1023增加到5905

④ 相关信息写入配置文件/etc/fstab,使交换分区在重启后生效

/dev/sdb2 swap swap default 0 0

image

六、磁盘容量配额

1、quota磁盘容量配额

作用:使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。

命令quota:进行磁盘容量配额管理

quota命令有软限制和硬限制功能:

  • 软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
  • 硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。

开启磁盘容量配置服务支持

centos7已经安装了quota磁盘容量配额服务程序包,但存储设备默认没有开启对quota的支持,需要手动编辑配置文件/etc/fstab,让系统的/boot目录支持quota磁盘配额。

/boot目录:开机所需文件—内核、开机菜单以及所需配置文件等

早期版本使用usrquota参数,而在centos7版本中使用uquota参数,

UUID=f65323da-db0b-4465-aec4-5e43acacdda6 /boot xfs defaults,uquota 0 0

image

重启后执行命令mount | grep boot查看boot已开启quoto支持

#重启前
[root@localhost /]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost /]# reboot
#重启后
[root@localhost ~]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)

2、xfs_quota命令

xfs_quota命令是一个专门针对XFS文件系统来管理quota磁盘容量配额服务而设计的命令。

命令格式:xfs_quota [参数] 配额 文件系统

选项参数:

  • -c:参数用于以参数的形式设置要执行的命令
  • -x:参数是专家模式,让运维人员能够对quota服务进行更多复杂的配置
示例:xfs_quota命令来设置用户tom对/boot目录的quota磁盘容量配额

① 创建用户tom,并改变/boot文件的权限针对其它用户可写权限

[root@localhost ~]# useradd tom
[root@localhost ~]# echo "1234" | passwd --stdin tom
[root@localhost ~]# ll / |grep boot
dr-xr-xr-x.   5 root root 4096 2月  13 18:35 boot
[root@localhost ~]# chmod -Rf o+w /boot
[root@localhost ~]# ll / |grep boot
dr-xr-xrwx.   5 root root 4096 2月  13 18:35 boot

② 创建限额控制:硬盘使用量的软限制和硬限制分别为3MB和6MB;创建文件数量的软限制和硬限制分别为3个和6个

[root@localhost ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot
# 查看配置
[root@localhost ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
                               Blocks                     
User ID          Used       Soft       Hard    Warn/Grace     
---------- -------------------------------------------------- 
root           156024          0          0     00 [--------]
tom                 0       3072       6144     00 [--------]

② 切换tom用户,创建一个体积为5MB和8MB文件,进行验证

dd命令: 拷贝文件及转换

[tom@localhost root]$ dd if=/dev/zero of=/boot/tom bs=5M count=1
记录了1+0 的读入
记录了1+0 的写出
5242880字节(5.2 MB)已复制,0.0177448 秒,295 MB/秒
[tom@localhost root]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
dd: 写入"/boot/tom" 出错: 超出磁盘限额
记录了1+0 的读入
记录了0+0 的写出
4194304字节(4.2 MB)已复制,0.00838856 秒,500 MB/秒

可看到创建8MB文件时受到了限制。

/dev/zero:linux中的“零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)。常用来生成一个特定大小的文件。

3、edquota命令

edquota命令用于编辑用户的quota配额限制。

命令格式:edquota [参数] [用户]

选项参数:

  • -u:表示要针对哪个用户进行设置
  • -g:表示要针对哪个用户组进行设置
示例:把用户tom的硬盘使用量的硬限额从5MB提升到8MB

① 提升硬盘使用量硬限额

[root@localhost ~]# edquota -u tom
Disk quotas for user tom (uid 1005):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda1                      5184       3072       8192          1        3        6

② 切换用户进行验证

[tom@localhost root]$ dd if=/dev/zero of=/boot/tom bs=6M count=1
记录了1+0 的读入
记录了1+0 的写出
6291456字节(6.3 MB)已复制,0.0151934 秒,414 MB/秒
[tom@localhost root]$ dd if=/dev/zero of=/boot/tom bs=9M count=1
dd: 写入"/boot/tom" 出错: 超出磁盘限额
记录了1+0 的读入
记录了0+0 的写出
8388608字节(8.4 MB)已复制,0.0161037 秒,521 MB/秒

结果创建超过8M的限制后,无法创建文件。

七、软硬方式链接

1、简介

在linux中存在两种文件的连接方式 ,Windows系统中的“快捷方式”。

  • 硬链接(hard link):可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。

      1. 硬链接文件与原始文件其实是同一个文件,只是名字不同。
      1. 硬链接以文件副本的形式存在,但不占用实际空间。
      1. 硬链接不允许给目录创建硬链接
      1. 硬链接只有在同一个文件系统中才能创建
      1. 硬连接不能跨分区对目录文件进行链接
  • 软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。

注意:硬连接删除原文件后,照样可以通过硬链接访问文件,只有当该文件的inode连接数为0时,才算彻底将它删除。而软连接则是当原始文件被删除后,链接文件也将失效,从这一点上来说与Windows系统中的“快捷方式”具有一样的性质。

2、ln命令操作软链接/硬链接

作用:用于创建链接文件。

命令格式:ln [选项] 目标

选项参数:

  • -s:创建“符号链接”(如果不带-s参数,则默认创建硬链接)
  • -f:强制创建文件或目录的链接
  • -i:覆盖前先询问
  • -v:显示创建链接的过程
示例1:创建硬连接

① 为家目录的a.txt文件在当前目录(也可是其它目录,但不能是不同分区)创建一个硬连接a

[root@localhost ~]# ln -sv a.txt ./a
"./a" => "a.txt"
[root@localhost ~]# ls -l a*
-rw-r--r--. 2 root root 12 2月  14 17:14 a
-rw-r--r--. 2 root root 12 2月  14 17:14 a.txt

查看文件,两个文件的索引节点都是2

② 修改a文件内容,查看a.txt是否变化

[root@localhost ~]# echo "hello world" >> a
[root@localhost ~]# cat a.txt
hello linux
hello world

硬链接文件a发生变化后,原文件a.txt也发生变化

③ 删除原文件,查看硬链接文件a是否能够访问

[root@localhost ~]# rm -rf a.txt 
[root@localhost ~]# cat a
hello linux
hello world
[root@localhost ~]# ls -l a*
-rw-r--r--. 1 root root 24 2月  14 17:23 a

删除原文件后,硬连接文件照样可以访问,同时查看文件信息,索引节点变为1。

示例2:创建软链接

实验之间还原a.txt文件,删除所有的硬链接。

① 为家目录的a.txt文件在当前目录(也可是其它目录或不同分区)创建一个软连接a

[root@localhost ~]# ln -sv a.txt a
[root@localhost ~]# ls -l a*
lrwxrwxrwx. 1 root root  5 2月  14 17:31 a -> a.txt
-rw-r--r--. 1 root root 24 2月  14 17:30 a.txt

a -> a.txt代码a指向a.txt文件。

② 修改a文件内容,查看a.txt是否变化

[root@localhost ~]# echo "hello world" >> a
[root@localhost ~]# cat a.txt 
hello linux
hello world
hello world

修改软链接文件a发生变化后,原文件a.txt也发生变化

③ 删除原文件,查看软链接文件a是否能够访问

[root@localhost ~]# rm -rf a.txt 
[root@localhost ~]# cat a
cat: a: 没有那个文件或目录

image

删除原文件后,软连接文件已经无法访问,同时查看文件信息,a-> a.txt已显示黑色,说明a指向了一个不存在的文件。


作业

1、/home目录与/root目录内存放的文件有何相同点以及不同点?

答:这两个目录都是用来存放用户的家目录数据的,但是,/root目录存放的是root管理员的家目录数据。

2、假如一个设备的文件名称为/dev/sdb,可以确认它是主板第二个插槽上的设备吗?

答:不一定,因为设备的文件名称是由系统的识别顺序来决定的。

3、/dev/sda5是主分区还是逻辑分区?

答:逻辑分区。

4、哪个服务决定了设备在/dev目录中的名称?

答:udev设备管理器服务。

5、用一句话来描述挂载操作。

答:当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。

6、在配置quota磁盘容量配额服务时,软限制数值必须小于硬限制数值么?

答:不一定,软限制数值可以小于等于硬限制数值。

7、若原始文件被改名,那么之前创建的硬链接还能访问到这个原始文件么?

答:可以。

刚学java菜鸡,永劫无间蚀月,王者荣耀王者,金铲铲小铂金,第五人格菜鸡,原神开服玩家,星穹铁道菜鸡,崩坏的菜鸡,闪耀暖暖,和平精英,LOL,CSGO,以及三A大作收集者等等。。。