Linux磁盘与文件系统管理

磁盘组成与分区

磁盘的组成

  1. 圆形的磁盘的圆盘
  2. 机械手臂:负责读写圆盘上的数据
  3. 主轴马达:转动磁盘,让机械手臂完成它的工作

磁盘的圆盘组成

  1. 扇区:最小物理存储单位,大小一般为512byte到4k不等
  2. 分区表:分区表有两种,一种是限制较多的MBR分区表,其组成为MBR(Master boot record)开机区,以及分区表(partition table),MBR占用466byte,而分区表占64byte。另一种则是GPT分区,分区数量可以更多,且支持的磁盘最大容量为2TB。

在这里插入图片描述

磁盘在Linux中的表示方式

实体磁盘:实体磁盘在Linux中通通被模拟成/dev/sd开头,若是一个磁盘则为/dev/sda。依次往后为/dev/sdb。以第一个磁盘为例,第一个磁盘的第一个分区为/dev/sda1,数字也是依次递增。所以实体磁盘格式基本为:

		/dev/sd[a-p][1-128]

虚拟磁盘:同理,格式为

	/dev/vp[a-d][1-128]

认识Linux文件系统

文件系统特性

文件系统在使用前都需要进行格式化,格式化为当前操作系统能够利用的文件系统格式。

文件系统组成:

		1. inode:记录每个文件block的位置,以及文件权限信息,每个文件有且仅有一个inode
		2. block:文件都会被存储到block中,如果文件大小超过一个block大小,则会用多个block装。
		3. superblock:记录文件系统的中inode、block的总量、剩余量、可用数量等。以及文件系统格式的相关信息。

EXT文件系统文件系统特点:如下图所示,为索引式文件系统,通过inode记录不同block位置,因为我们可以根据索引位置,决定磁盘转动方式以获取文件,所以查询速度较快。

在这里插入图片描述

FAT文件系统:如下图所示,类似链表组成所有的block,因为没有索引,所以必须一个节点一个节点的获取,如果分散过大,很可能文件查询读取效率就会非常差。所以FAT系统经常需要进行碎片整理的工作。
在这里插入图片描述

关于ext格式文件系统,以笔者阿里云为例,键入以下指令查找ext格式磁盘

blkid

在这里插入图片描述

再键入这条命令查看该虚拟磁盘的详细信息

 dumpe2fs /dev/vda1

就可以看到bock、inode等相关信息

在这里插入图片描述

Linux的EXT2文件系统

为方便管理庞大的文件系统,Linux将不同的inode/block/superblock分组。并将启动扇区boot sector放在最前面

在这里插入图片描述

不同大小的blcok所能存储的文件限制

在这里插入图片描述

block特点

	1. 除非格式化,否则文件系统的block不会变
	2. 一个block只能存储一个文件的数据
	3. 若文件过大则用多个block装,若文件小于一个blcok,则该block不会被填满,且不可用于存储其他文件数据

假设你的 Ext2 文件系统使用 4K block ,而该文件系统中有 10000 个小文件,每个文件大小均为 50bytes, 请问此时你的磁盘浪费多少容量?

答:

	用到的block大小       文件大小总和
	4*1024*10000     -     50*10000/(1024*1024)≈38M

inode特性:

1. 文件权限
2. 文件所属者、所属组
3. 文件容量
4. 建立时间、修改时间、最后访问时间
5. 所指向的文件block
6. 大小均为128byte(ext4和xfs为256byte)
7. 文件能建立的数量和inode有关
8. 文件查找过程都是先找到inode,通过inode判断该用户是否有权限,若有再去找对应的block

inode为了能够存储较大的数据,数据结构如下,用12个只想block,1个间接指向block,一个双间接指向block,一个3间接指向block。

如此一来,假如一个block为1k,inode就可以存储

	直接指向数据大小:12*1=12k
	一个间接:(1024/4)*1=256==>记录一个block要花费4byte
	双间接:256*256*1
	三间接:256*256*256
	上述总和大约16G

虽然理论上可以16G,但由于上文提到的block文件大小限制,所以实际存储数据大小可能与这里计算的有所出入。

在这里插入图片描述

superblock记录主要信息:

		1. inode/blcok总量
		2. 最近挂载时间、最近写入数据时间、最佳依次校验磁盘时间等
		3. valid bit:0表示文件系统未被挂载,1表示挂载

filesystem describtion:文件描述符,记录文件的描述信息

block bitmap:记录已被使用和未被使用的block地址
inode bitmap: 同block bitmap,记录inode的使用情况,以便系统分配节点。

文件夹如何使用inode和blcok

如下图,系统会为文件夹分配一个inode和blcok,文件夹的blcok记录文件的inode,而一个个文件inode指向对应的文件block。

在这里插入图片描述

查看文件夹,inode号和block大小,以boot分区为例

# i查看inode,d查看目录信息
ls -ldi /boot

可以看到inode号为64,block大小为4k
在这里插入图片描述

文件读取过程,以上面指令为例,文件读取过程为:

	1. 前往/查看/的inode,判断当前用户是否有权限,若有则前往/inode
	2. 然后找到boot的inode,判断用户是否有权限,若有则前往boot的block
	3. 读取boot的block数据

文件系统大小与读取性能问题:若文件系统过大,即使使用索引存储的ext,文件也会出现过于离散的情况,导致读取时磁盘来回转动,导致读取性能较低。对此我们可能需要采取文件备份,并将文件系统格式化后再将文件数据重新存入的方式解决该问题。

EXT2、EXT2、EXT2文件的存取与日志式文件系统

在ext系列文件系统中,如果用户需要创建文件夹或者文件时。他们会进行以下步骤

	1. 判断当前用户是否具备当前文件目录的x和w权限
	2. 从inode bitmap中查找到合适的空闲的节点,并将文件权限写入到节点中
	3. 查找合适的blcok将用户创建的文件内容写入,再用上文拿到的inode指向这个block
	4. 更新blcok bitmap、inode bitmap以及super block的内容

数据存放区和metadata区
一般来说我们将inode table和data block认为时数据存放区,而super block、block bitmap和inode bitmap这些经常变动的区域称为中介区。

数据不一致问题
在数据日常读取和写入过程中,很可能出现仅仅更新完数据存放区,结果机子停电,metadata区数据没有及时写入导致数据不一致问题。
早期ext2格式的磁盘会根据super block的valid bit以及file system是否clean来判断是否存在这个问题,但是这种操作会进行全盘扫描对metadata和数据存放区进行一一比对,所以性能非常差。
现如今的ext2系统基本采取日志文件系统,他们解决数据不一致的方案就是采用日志系统的方式:

	1. 写入数据前先判断用户是否具备x、w权限,日志记录一下表明开始某个文件要准备写入了
	2. 开始写入文件权限和数据,并更新metadata数据。
	3. 完成写入后,日志中在记录以下写入的记录

以笔者阿里云服务器为例,该服务的磁盘对应日志journal inode8指向的block整整128M的容量负责处理上文所述的日志。

在这里插入图片描述

Linux文件系统的运作

某些文件大小可能会非常庞大,如果每次进行读写都要经过硬盘读取到内存再到CPU完成指令运算显然非常耗时。Linux对此做出一定优化,在内存空间足够情况下数据会被暂时存放在内存中,若数据未被修改的文件状态为clean,当数据被修改过,则状态会被设置为dirty,操作系统会在某个时间段运行sync指令将dirty数据写回磁盘中,亦或者在内存空间数据不足时,被置换写回磁盘中。

在这里插入图片描述

挂载点的意义

将文件系统和目录关联起来的操作,我们就称为挂载。我们都知道一个文件只会占用一个inode,键入如下命令可以看到三个目录对应的文件信息都各有不同,说明这几个目录的挂载点是不一样的

ls -lid / /boot/ /home

在这里插入图片描述

ls -lid  / /. /..

可以看到上述三个目录无论inode还是其他文件属性均一样,这就意味着他们是挂载点一样的相同文件

在这里插入图片描述

其他Linux支持的文件系统与VFS

传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;
日志式文件系统: ext3 /ext4 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS / ZFS
网络文件系统: NFS / SMBFS

查看Linux系统所支持的文件系统指令

ls /lib/modules/$(uname -r)/kernel/fs

在这里插入图片描述

查看目前加载到内存中所支持的文件系统

cat /proc/filesystems

在这里插入图片描述

VFS的设计让Linux用户无需在读取特定文件系统时需要指定格式去读取文件,如下图通过VFS统一管理使得文件读取变得更加方便。

在这里插入图片描述

XFS文件系统简介

EXT在格式化时会对系统进行inode/block/metadata提前划分,对于现如今动不动以PB、EB为单位的磁盘来说是非常耗时的。

XFS规划为3个部分:

	1. data section:有个和ext分区block group类似的allocation groups,该分区包含整个文件系统的superblock、剩余空间管理、inode管理与分配与追钟(注意inode和block位置都是动态配置产生的,相较于ext更快。这里补充一下,xfs文件系统block512byte都64k不等,但由于Linux的限制,所以block基本都是4k,inode都是256k。
	2. log section(文件系统日志区):文件的变化基本都会被记录在这个区域,所以文件丢失时都可以通过这个区域去查看详情。因为这个区域变化频繁,建议这个区域使用ssd盘。
	3. realtime section (实时运作区):文件建立且被写入前,会被存储到这个区域的extent块中,然后再被写入到data section的inode和block中

查阅xfs系统的详细信息

 df -T /boot/

在这里插入图片描述

xfs_info /dev/sda1

输出结果

meta-data=/dev/sda1              isize=512    agcount=4, agsize=65536 blks ==>inode 512个 allocation group 4个
         =                       sectsz=512   attr=2, projid32bit=1==>扇区为512byte
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=262144, imaxpct=25==>block大小为4k 有262144个
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2==》日志区block1的信息
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0==>实时运行区的extent容量 none表示未被使用

文件系统的简单操作

磁盘与目录的容量查看

df命令

查看当前系统所有filesystem

 df

输出

文件系统              块大小单位kb  已用空间 可用空间 使用率  挂载点
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   480776       0    480776   0% /dev
tmpfs                      497852       0    497852   0% /dev/shm
tmpfs                      497852   15032    482820   4% /run
tmpfs                      497852       0    497852   0% /sys/fs/cgroup
/dev/mapper/centos-root  17811456 5020576  12790880  29% /
/dev/sda1                 1038336  175628    862708  17% /boot
tmpfs                       99572      52     99520   1% /run/user/0
tmpfs                       99572       0     99572   0% /run/user/1000

使用可读性强大方式查看

 df -h

输出结果

Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 470M     0  470M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M   15M  472M   4% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  4.8G   13G  29% /
/dev/sda1               1014M  172M  843M  17% /boot
tmpfs                     98M   52K   98M   1% /run/user/0
tmpfs                     98M     0   98M   0% /run/user/1000

将系统所有filesystem都列出

df -aT

查看etc下的磁盘情况

df -h /etc/

输出结果

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  4.8G   13G  29% /

查看系统中各个分区的inode容量

 df -ih
Filesystem              Inodes IUsed IFree IUse% Mounted on
devtmpfs                  118K   420  117K    1% /dev
tmpfs                     122K     1  122K    1% /dev/shm
tmpfs                     122K  1006  121K    1% /run
tmpfs                     122K    16  122K    1% /sys/fs/cgroup
/dev/mapper/centos-root   8.5M  132K  8.4M    2% /
/dev/sda1                 512K   340  512K    1% /boot
tmpfs                     122K    25  122K    1% /run/user/0
tmpfs                     122K     1  122K    1% /run/user/1000

更多参数

选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
-i :不用磁盘容量,而以 inode 的数量来显示

du命令

列出所有文件夹容量

du
选项与参数:
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示

在这里插入图片描述

列出文件夹以及文件的容量

du -a

列出root目录下,这一级别的文件容量

du -sm /root/*

若想查看root子目录和孙目录的容量用大写S即可

du -Sm /root/*

在这里插入图片描述

磁盘的分区、格式化、检验与挂载

Linux使用磁盘永远需要经历以下几步

	1. 建立分区
	2. 格式化
	3. 对格式化好的文件系统进行检验
	4. 挂载到文件目录给用户使用

观察磁盘分区状态

查看磁盘列表

 lsblk [- - dfimpt] [device]
选项与参数:
-d :仅列出磁盘本身,并不会列出该磁盘的分区数据
-f :同时列出该磁盘内的文件系统名称
-i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
-m :同时输出该装置在 /dev 底下的权限数据 (rwx 的数据)
-p :列出该装置的完整文件名!而不是仅列出最后的名字而已。
-t :列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等

示例

[zhangshiyu@localhost ~]$ lsblk

名称   系统格式参数  是否只读 0:是 文件类型    挂载点  
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
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64

列出系统装置完整文件名


[zhangshiyu@localhost ~]$ lsblk -ip
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda                      8:0    0   20G  0 disk
|-/dev/sda1                   8:1    0    1G  0 part /boot
`-/dev/sda2                   8:2    0   19G  0 part
  |-/dev/mapper/centos-root 253:0    0   17G  0 lvm  /
  `-/dev/mapper/centos-swap 253:1    0    2G  0 lvm  [SWAP]
/dev/sr0                     11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64

blkid列出文件系统与装置的uuid,uuid是全局唯一标识符

注意:这个指令需要root权限

[root@localhost zhangshiyu]# blkid
# 输出了对应磁盘的uuid
/dev/sda1: UUID="78609146-1ea1-4990-8b22-1c853a1d2da1" TYPE="xfs"
/dev/sda2: UUID="57Dhuy-x7DZ-h18K-o7tu-fkcQ-b8QQ-7W2lLn" TYPE="LVM2_member"
/dev/sr0: UUID="2020-11-04-11-36-43-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="95e9047c-5bef-42a2-9eac-3cb8edd5e348" TYPE="xfs"
/dev/mapper/centos-swap: UUID="d659c9dd-63d4-4fe9-96a1-e366279c638d" TYPE="swap"

parted:列出磁盘以及磁盘分区的信息,根据上文lsblk看到的磁盘(注意是磁盘名不是分区名,如下所示,笔者使用的是sda而不是sda1、sda2这些),我们选一个输出一个查看详情

[root@localhost zhangshiyu]# parted /dev/sda print
Model: VMware, VMware Virtual S (scsi) # 尝试名称
Disk /dev/sda: 21.5GB # 容量
Sector size (logical/physical): 512B/512B # 逻辑区大小和扇区大小
Partition Table: msdos # 分区表格式这种就是MBR,还有一种GPT
Disk Flags:
# 分区号 起始位置 结束位置 大小  文件类型 文件系统 
Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1075MB  1074MB  primary  xfs          boot
 2      1075MB  21.5GB  20.4GB  primary               lvm

磁盘分区:gdisk/fdisk

前置步骤,为了方便演示磁盘分区创建,笔者对虚拟机硬盘进行扩容
在这里插入图片描述

由于笔者使用的系统采用MBR格式,所以划分磁盘的时候采用fdisk命令,通过上文我们知道我们的硬盘是在dev/sda,所以笔者就在这个分区进行分区创建

[root@localhost zhangshiyu]# fdisk /dev/sda⇒ 键入该命令开始创建分区
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   ==>选择n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p):
Using default response p
Partition number (3,4, default 3):==>选择回车
First sector (41943040-44040191, default 41943040):==>选择回车
Using default value 41943040
Last sector, +sectors or +size{K,M,G} (41943040-44040191, default 44040191): +100M ==>笔者这里分区设置为100M
Partition 3 of type Linux and of size 100 MiB is set ==>创建完成了


Command (m for help): p==>使用p查看磁盘详情,发现sda3创建完成了

Disk /dev/sda: 22.5 GB, 22548578304 bytes, 44040192 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: 0x000b270e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
/dev/sda3        41943040    42147839      102400   83  Linux


Command (m for help): w==>将你的修改写入,更多操作可以键入m查看



使用命令更新以下信息,以便看到刚刚重建的分区

partprobe --s

可以看到sda3创建完成了

[root@localhost zhangshiyu]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   21G  0 disk
├─sda1            8:1    0    1G  0 part /boot
├─sda2            8:2    0   19G  0 part
│ ├─centos-root 253:0    0   17G  0 lvm  /
│ └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
└─sda3            8:3    0  100M  0 part
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64

查看核心分区记录中也能看到我们刚刚创建的分区

[root@localhost zhangshiyu]# cat /proc/partitions
major minor  #blocks  name

   8        0   22020096 sda
   8        1    1048576 sda1
   8        2   19921920 sda2
   8        3     102400 sda3
  11        0    4601856 sr0
 253        0   17821696 dm-0
 253        1    2097152 dm-1

删除分区也很简单,如下所示:

fdisk /dev/sda
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): d  =>选择d就是删除
Partition number (1-3, default 3):=>默认选择3
Partition 3 is deleted

Command (m for help):
Command (m for help):
Command (m for help): quit

更新一下

 partprobe -s

可以看到sda3就消失了


[root@localhost zhangshiyu]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   21G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64

gdisk操作和fdisk差不多,笔者就不多赘述了,注意gdisk只适合gpt格式的磁盘,关于磁盘格式可以使用上文parted进行查看

磁盘格式化

完成分区创建就需要进行磁盘格式化了,磁盘格式化命令如下

mkfs.xfs /dev/sda3

可以看到格式化后变为xfs,说明上述操作成功了


[root@localhost zhangshiyu]# blkid /dev/sda3
/dev/sda3: UUID="f5a4398e-ab13-4f60-8d58-dba6cf4a5617" TYPE="xfs"

更多操作

[root@study ~]#  mkfs.xfs [- b bsize] [- d parms] [- i parms] [ [- l parms] [- L label] [-f] \
[ -r parms]  装置名称
选项与参数:
关于单位:底下只要谈到『数值』时,没有加单位则为 bytes 值,可以用 k,m,g,t,p (小写)等来解释
比较特殊的是 s 这个单位,它指的是 sector 的『个数』喔!
-b :后面接的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k 喔!
-d :后面接的是重要的 data section 的相关参数值,主要的值有:
agcount=数值 :设定需要几个储存群组的意思(AG),通常与 CPU 有关
agsize=数值 :每个 AG 设定为多少容量的意思,通常 agcount/agsize 只选一个设定即可
file :指的是『格式化的装置是个文件而不是个装置』的意思!(例如虚拟磁盘)
size=数值 :data section 的容量,亦即你可以不将全部的装置容量用完的意思
su=数值 :当有 RAID 时,那个 stripe 数值的意思,与底下的 sw 搭配使用
sw=数值 :当有 RAID 时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)
sunit=数值 :与 su 相当,不过单位使用的是『几个 sector(512bytes 大小)』的意思
swidth=数值 :就是 su*sw 的数值,但是以『几个 sector(512bytes 大小)』来设定
-f :如果装置内已经有文件系统,则需要使用这个 -f 来强制格式化才行!
-i :与 inode 有较相关的设定,主要的设定值有:
size=数值 :最小是 256bytes 最大是 2k,一般保留 256 就足够使用了!
internal=[0|1]:log 装置是否为内建?预设为 1 内建,如果要用外部装置,使用底下设定
logdev=device :log 装置为后面接的那个装置上头的意思,需设定 internal=0 才可!
size=数值 :指定这块登录区的容量,通常最小得要有 512 个 block,大约 2M 以上才行!
-L :后面接这个文件系统的标头名称 Label name 的意思!
-r :指定 realtime section 的相关设定值,常见的有:
extsize=数值 :就是那个重要的 extent 数值,一般不须设定,但有 RAID 时,
最好设定与 swidth 的数值相同较佳!最小为 4K 最大为 1G 。

为了提高读写效率,我们可以根据cpu核心数调整agcount以提升读写效率

# 由于上文指定过文件系统格式,这里修改需要加-f
[root@localhost zhangshiyu]# mkfs.xfs  -f -d agcount=6   /dev/sda3
meta-data=/dev/sda3              isize=512    agcount=6, agsize=4267 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

其他系统格式同样可以使用mkfs,具体读者可以参照上文提示进行设置,例如将sda3改为ext4

 mkfs.ext4  /dev/sda3

文件系统检验

完成磁盘格式化之后需要对系统进行校验查看分区是否正常了
xfs格式的检验

[root@study ~]#  xfs_repair [-fnd]  装 置名 称
选项与参数:
-f :后面的装置其实是个文件而不是实体装置
-n :单纯检查并不修改文件系统的任何数据 (检查而已)
-d :通常用在单人维护模式底下,针对根目录 (/) 进行检查与修复的动作!很危险!不要随便使用
[root@localhost zhangshiyu]# xfs_repair /dev/sda3
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - agno = 5
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - agno = 5
Phase 5 - rebuild AG headers and trees...
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done

ext格式的检验时,我们可以查出super block进行检查

[root@study ~]#  fsck.ext4 [- pf] [-b superblock]  装 置名 称
选项与参数:
-p :当文件系统在修复时,若有需要回复 y 的动作时,自动回复 y 来继续进行修复动作。
-f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入
细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标啰!
-D :针对文件系统下的目录进行优化配置。
-b :后面接 superblock 的位置!一般来说这个选项用不到。但是如果你的 superblock 因故损毁时,
透过这个参数即可利用文件系统内备份的 superblock 来尝试救援。一般来说,superblock 备份在:
1K block 放在 8193, 2K block 放在 16384, 4K block 放在 32768

[root@localhost zhangshiyu]# dumpe2fs -h /dev/sda3 |grep 'Blocks per group'
dumpe2fs 1.42.9 (28-Dec-2013)
Blocks per group:         8192==>根据上面提示1kblock会在8193


使用fsck.ext4根据上文首个块号+0或者+1获取super block开始进行分区校验


[root@localhost zhangshiyu]# fsck.ext4 -b 8193 /dev/sda3
e2fsck 1.42.9 (28-Dec-2013)
/dev/sda3 was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/sda3: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda3: 11/25688 files (9.1% non-contiguous), 8896/102400 blocks

普通检查

[root@localhost zhangshiyu]# fsck.ext4  /dev/sda3
e2fsck 1.42.9 (28-Dec-2013)
/dev/sda3: clean, 11/25688 files, 8896/102400 blocks

强制检查


[root@localhost zhangshiyu]# fsck.ext4 -f  /dev/sda3
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda3: 11/25688 files (9.1% non-contiguous), 8896/102400 blocks

文件系统挂载与卸除

完成上述步骤之后就开始文件系统挂载了,挂载的作用就是将创建的分区与用户创建的文件目录关联起来,这样该目录存储的数据就会被保存到分区中。
如下图,将sda3挂载到newDir,newDir的数据就会被存到sda3这个分区中。

在这里插入图片描述

[root@study ~]#  mount - -a a
[root@study ~]#  mount [- l]
[root@study ~]#  mount [- t  文件系 统 ] LABEL='' 挂载点
[root@study ~]#  mount [- t  文件系 统 ] UUID='' 挂载点 # 鸟哥近期建议用这种方式喔!
[root@study ~]#  mount [- t  文件系 统 ]  装 置文件名 挂 载点
选项与参数:
-a :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
-l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!
-t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,
reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运作。
但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。
-o :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:
async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的
内存机制,请参考文件系统运作方式。预设为 async。
atime,noatime: 是否修订文件的读取时间(atime)。为了效能,某些时刻可使用 noatime
ro, rw: 挂载文件系统成为只读(ro) 或可擦写(rw)
auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)
dev, nodev: 是否允许此 filesystem 上,可建立装置文件? dev 为可允许
suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?
exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?
user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说,
mount 仅有 root 可以进行,但下达 user 参数,则可让
一般 user 也能够对此 partition 进行 mount 。
defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!

例如我们在上文创建了一个ext4的sda3,现在我们希望能够挂载到/data/ext4目录下

# 创建ext4文件夹
[root@localhost zhangshiyu]# mkdir -p /data/ext4
# 查看sda3 uuid
[root@localhost zhangshiyu]# blkid /dev/sda3
/dev/sda3: UUID="20400dc0-9612-466c-b1c1-d3583efb26cb" TYPE="ext4"
# 使用uuid挂载sda3
[root@localhost zhangshiyu]# mount  UUID="20400dc0-9612-466c-b1c1-d3583efb26cb" /data/ext4
# 查看挂载是否成功
[root@localhost zhangshiyu]# df /data/ext4/
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sda3          95054  1550     86336   2% /data/ext4
[root@localhost zhangshiyu]# df -h  /data/ext4/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        93M  1.6M   85M   2% /data/ext4
[root@localhost zhangshiyu]#


挂载光盘

# 查看光盘的uuid
[root@localhost zhangshiyu]# blkid
/dev/sda3: UUID="20400dc0-9612-466c-b1c1-d3583efb26cb" TYPE="ext4"
/dev/sda1: UUID="78609146-1ea1-4990-8b22-1c853a1d2da1" TYPE="xfs"
/dev/sda2: UUID="57Dhuy-x7DZ-h18K-o7tu-fkcQ-b8QQ-7W2lLn" TYPE="LVM2_member"
/dev/sr0: UUID="2020-11-04-11-36-43-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="95e9047c-5bef-42a2-9eac-3cb8edd5e348" TYPE="xfs"
/dev/mapper/centos-swap: UUID="d659c9dd-63d4-4fe9-96a1-e366279c638d" TYPE="swap"



# 创建挂载目录
[root@localhost zhangshiyu]# mkdir -p /data/cdrom

# 执行挂载
[root@localhost zhangshiyu]# mount UUID="2020-11-04-11-36-43-00" /data/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
# 验证挂载是否成功
[root@localhost zhangshiyu]# df -h /data/cdrom/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sr0        4.4G  4.4G     0 100% /data/cdrom

# 查看挂载目录下的文件
[root@localhost zhangshiyu]# ls -l /data/cdrom/
total 696
-rw-r--r--.  3 root root     14 Oct 30  2020 CentOS_BuildTag
drwxr-xr-x.  3 root root   2048 Oct 27  2020 EFI
-rw-rw-r--. 21 root root    227 Aug 30  2017 EULA
-rw-rw-r--. 21 root root  18009 Dec 10  2015 GPL
drwxr-xr-x.  3 root root   2048 Oct 27  2020 images
drwxr-xr-x.  2 root root   2048 Nov  3  2020 isolinux
drwxr-xr-x.  2 root root   2048 Oct 27  2020 LiveOS
drwxr-xr-x.  2 root root 673792 Nov  4  2020 Packages
drwxr-xr-x.  2 root root   4096 Nov  4  2020 repodata
-rw-rw-r--. 21 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 21 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--.  1 root root   2883 Nov  4  2020 TRANS.TBL
[root@localhost zhangshiyu]#

重新挂载根目录与挂载不特定目录,将只读的根目录改为可读可写

mount -o remount ,rw ,auto /

挂载文件目录

# 创建挂载文件夹
[root@localhost zhangshiyu]# mkdir /data/var
# 将var挂载到创建的文件夹
[root@localhost zhangshiyu]# mount --bind /var/ /data/var/
# 查看文件属性 发现一致,说明挂载成功
[root@localhost zhangshiyu]# ls -lid /var/ /data/var/
50331713 drwxr-xr-x. 21 root root 4096 May  2 01:13 /data/var/
50331713 drwxr-xr-x. 21 root root 4096 May  2 01:13 /var/
[root@localhost zhangshiyu]#


卸载,只需umount 挂载目录即可,如下就是卸载光盘的使用姿势

umount /data/cdrom

磁盘/文件系统参数修订

centos都是通过major和minor来表示这些分区,如下这些8,0 8,1 8,2就是,我们可以对用mknod来修改为创建的分区的这两个值


[root@localhost zhangshiyu]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Jun 29 22:24 /dev/sda
brw-rw----. 1 root disk 8, 1 Jun 29 22:24 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jun 29 22:24 /dev/sda2
brw-rw----. 1 root disk 8, 3 Jun 29 22:36 /dev/sda3
brw-rw----. 1 root disk 8, 4 Jun 29 22:24 /dev/sda4

对此我们必须先了解一下mknod这个命令

[root@study ~]#  mknod  装 置文件名 [bcp] [Major] [Minor]
选项与参数:
装置种类:
b :设定装置名称成为一个周边储存设备文件,例如磁盘等;
c :设定装置名称成为一个周边输入设备文件,例如鼠标/键盘等;
p :设定装置名称成为一个 FIFO 文件;
Major :主要装置代码;
Minor :次要装置代码;

例如我想将sda5的值改为8,5

[root@localhost zhangshiyu]# mknod /dev/sda5 b 8 5
# 可以看到sda5的两个值都出来了
[root@localhost zhangshiyu]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Jun 29 22:24 /dev/sda
brw-rw----. 1 root disk 8, 1 Jun 29 22:24 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jun 29 22:24 /dev/sda2
brw-rw----. 1 root disk 8, 3 Jun 29 22:36 /dev/sda3
brw-rw----. 1 root disk 8, 4 Jun 29 22:24 /dev/sda4
brw-r--r--. 1 root root 8, 5 Jun 30 00:24 /dev/sda5


这两个值范围基本都在表中,如下

在这里插入图片描述

假如我们想修改分区的label

# 查看刚刚重建的sda5的lable
[root@localhost zhangshiyu]# xfs_admin -l /dev/sda5
label = ""
# 修改为sda5
[root@localhost zhangshiyu]# xfs_admin -L sda5  /dev/sda5
writing all SBs
new label = "sda5"
# 查看是否更新成功
[root@localhost zhangshiyu]# xfs_admin -l /dev/sda5
label = "sda5"
# 后续就可以拿label进行挂载了
[root@localhost zhangshiyu]# mkdir -p /data/sda5
[root@localhost zhangshiyu]# mount LABEL=sda5 /data/sda5/
[root@localhost zhangshiyu]#




更多参数

[root@study ~]#  xfs_admin [- lu] [- L label] [- U uuid]  装置文件名
选项与参数:
-l :列出这个装置的 label name
-u :列出这个装置的 UUID
-L :设定这个装置的 Label name
-U :设定这个装置的 UUID 喔!

而tune2fs则是用于设置ext4的label,示例如下

# 查看sda3的label
[root@localhost zhangshiyu]# dumpe2fs -h /dev/sda3 |grep name
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
# 使用tune2fs修改
[root@localhost zhangshiyu]# tune2fs -L sda3 /dev/sda3
tune2fs 1.42.9 (28-Dec-2013)
# 判断是否修改成功,若成功后续就可以使用这个lable进行挂载
[root@localhost zhangshiyu]# dumpe2fs -h /dev/sda3 |grep name
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   sda3
[root@localhost zhangshiyu]#


设定开机挂载

开机挂载配置

有时候我们希望我们装置开机就会自动挂载,对此我们就可以通过/etc/fstab完成开机自动挂载

[root@localhost zhangshiyu]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun May  1 13:03:39 2022
#
# 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
#
# 磁盘名或者uuid或者label                文件系统        文件系统参数具体见下表 是否可以dump  是否可以fsck
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=78609146-1ea1-4990-8b22-1c853a1d2da1 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

在这里插入图片描述

查看sda5是xfs
[root@localhost zhangshiyu]# blkid
/dev/sda3: LABEL="sda3" UUID="20400dc0-9612-466c-b1c1-d3583efb26cb" TYPE="ext4"
/dev/sda1: UUID="78609146-1ea1-4990-8b22-1c853a1d2da1" TYPE="xfs"
/dev/sda2: UUID="57Dhuy-x7DZ-h18K-o7tu-fkcQ-b8QQ-7W2lLn" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="95e9047c-5bef-42a2-9eac-3cb8edd5e348" TYPE="xfs"
/dev/mapper/centos-swap: UUID="d659c9dd-63d4-4fe9-96a1-e366279c638d" TYPE="swap"
/dev/sda5: LABEL="sda5" UUID="61b62f20-4ef1-49df-a0a2-f2aa623a91e0" TYPE="xfs"
# 编辑配置文件 添加一行 /dev/sda5       /data/sda5                      xfs      defaults      0  0
[root@localhost zhangshiyu]# vi /etc/fstab
# 使之生效
[root@localhost zhangshiyu]# mount -a
# 查看
[root@localhost zhangshiyu]# df /data/sda5/
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sda5          47780  2688     45092   6% /data/sda5
[root@localhost zhangshiyu]#

特殊装置loop挂载

对应某些已存在文件夹中的iso等文件,我们可以使用loop赖挂载

# 查看iso信息
[root@localhost ~]# ll -h /root/winPreVista.iso
-rw-r--r--. 1 root root 84M 6月  30 09:10 /root/winPreVista.iso
# 创建挂载文件夹
[root@localhost ~]# mkdir -p /data/cdrom
# 查看挂载磁盘的文件系统
[root@localhost ~]# df /data/cdrom/
文件系统               1K-块    已用     可用 已用% 挂载点
/dev/mapper/cl-root 37320904 8478408 28842496   23% /
# 使用loop挂载
[root@localhost ~]# mount -o loop /root/winPreVista.iso /data/cdrom/
mount: /dev/loop1 写保护,将以只读方式挂载
# 查看挂载是否成功
[root@localhost ~]# df /data/cdrom/
文件系统       1K-块  已用  可用 已用% 挂载点
/dev/loop1     85696 85696     0  100% /data/cdrom

同样的mount也可以拿某些大文件格式化后进行挂载使用



# 创建一个512M的空间
[root@localhost ~]# dd if=/dev/zero of=/srv/loopdev bs=1M count=512
512+0 records in <==读入 512 笔资料
512+0 records out <==输出 512 笔数据
536870912 bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s
# 这个指令的简单意义如下:
# if 是 input file ,输入文件。那个 /dev/zero 是会一直输出 0 的装置!
# of 是 output file ,将一堆零写入到后面接的文件中。
# bs 是每个 block 大小,就像文件系统那样的 block 意义;
# count 则是总共几个 bs 的意思。所以 bs*count 就是这个文件的容量了!

#输出内容

记录了512+0 的读入
记录了512+0 的写出
536870912字节(537 MB)已复制,0.926613 秒,579 MB/秒
# 查看创建的目录详情
[root@localhost ~]# ll -h /srv/loopdev
-rw-r--r--. 1 root root 512M 6月  30 09:18 /srv/loopdev
# 设置文件系统格式xfs
[root@localhost ~]# mkfs.xfs -f /srv/loopdev
meta-data=/srv/loopdev           isize=512    agcount=4, agsize=32768 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=131072, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# 创建挂载目录
[root@localhost ~]# mkdir -p /tmp/loopDir
# 查看目录系统格式
[root@localhost ~]# df -h /tmp/loopDir/
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/cl-root   36G  8.1G   28G   23% /


# 使用loop参数进行挂载
[root@localhost ~]# mount -o loop /srv/loopdev /tmp/loopDir/

# 查看挂载是否成功
[root@localhost ~]# df -h /tmp/loopDir/
文件系统        容量  已用  可用 已用% 挂载点
/dev/loop2      509M   26M  483M    6% /tmp/loopDir
[root@localhost ~]#

内存置换空间swap区创建

swap分区

在服务器运行过程中,当物理内存不足时,操作系统就会使用内存置换算法将内存中某些数据块置换到swap区。所以足量的swap分区对于服务器来说是十分重要的。

使用实体分区增加swap分区

使用实体分区创建swap分区时,同样需要我们首先创建一个分区,才能开展步骤,以笔者为例,笔者在开始扩容swap分区时,已经先创建一个sda3分区大小为50M

#  查看sda3磁盘信息
[root@localhost ~]# df -h /dev/sda3
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        470M     0  470M   0% /dev
# 查看swap空间大小
[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:         995672      741652       83736       27940      170284       83508
Swap:       2097148      105728     1991420

# 查看新建的sda3分区类型,可以看到并没有显示任何类型
[root@localhost ~]# blkid /dev/sda3



# 将sda3分区设置为swap格式
[root@localhost ~]# mkswap /dev/sda3
Setting up swapspace version 1, size = 51196 KiB
no label, UUID=6bd7e30c-eebb-4f5f-882b-5954da7b27bb

# 再用blkid查看会发现此时type变为sda3分区
[root@localhost ~]# blkid /dev/sda3
/dev/sda3: UUID="6bd7e30c-eebb-4f5f-882b-5954da7b27bb" TYPE="swap"

#将sda3挂载到swap分区
[root@localhost ~]# swapon /dev/sda3

# 此时查看空间大小,会发现swap分区变大了
[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:         995672      742008       83084       27952      170580       83012
Swap:       2148344      105728     2042616

# 查看swap挂载详情,发现多了一个sda3
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 105728  -2
/dev/sda3                               partition       51196   0       -3

# 设置开机自动挂载 添加一行 
# UUID="6bd7e30c-eebb-4f5f-882b-5954da7b27bb"     swap      swap         defaults 0 0 uuid即sda3的uuid
[root@localhost ~]# vim /etc/fstab

使用文件建立swap区

同样的,我们也可以使用文件给swap扩容

# 使用zero创建一个128M的空间
[root@localhost ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB) copied, 0.119561 s, 1.1 GB/s

# 查看创建的分区大小是否正确
[root@localhost ~]# ls -lhd /tmp/swap
-rw-r--r--. 1 root root 128M Jun 30 19:31 /tmp/swap

# 将该分区设置为swap格式
[root@localhost ~]# mkswap /tmp/swap
Setting up swapspace version 1, size = 131068 KiB
no label, UUID=146be5b5-8661-46ec-a0e0-67f0ed80c682
# 查看当前挂载的分区
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 105728  -2
/dev/sda3                               partition       51196   0       -3

# 重点,设置权限为600否则挂载会被警告
[root@localhost ~]# chmod 600 /tmp/swap

# 挂载
[root@localhost ~]# swapon /tmp/swap

# 查看挂载是否成功
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 105532  -2
/dev/sda3                               partition       51196   0       -3
/tmp/swap                               file    131068  0       -4
# 编辑文件 设置开机自动挂载
# 添加一行 /tmp/swap swap swap defaults 0 0 ,注意文件创建的swap不可用uuid,系统仅会查询组成设备,不会扫描文件
[root@localhost ~]# vim /etc/fstab

# 查看挂载是否成功
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 105532  -2
/dev/sda3                               partition       51196   0       -3
/tmp/swap                               file    131068  0       -4


完成两个挂载示例后,尝试将刚刚挂载的swap分区卸载进行自动挂载,验证配置文件是否正常

# 卸载
[root@localhost ~]# swapoff /dev/sda3 /tmp/swap
# 查看到卸载成功了
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 105532  -2

# 挂载并查看发现都挂载上去了,说明配置文件没问题
[root@localhost ~]# swapon -a
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 105532  -2
/dev/sda3                               partition       51196   0       -3
/tmp/swap                               file    131068  0       -4

文件系统的特殊观察与操作

磁盘空间浪费问题

如下所示,在笔者系统的加目录中占用了4.4G的空间,这其中也涉及到一些资源的浪费如下图initial-setup-ks.cfg命名只有1.8k,但是系统默认的block是4k,这就导致无论文件大小多少,一律使用4k的block进行装填,如果在一个有大量小体积的文件场景下,存储空间浪费现象可能会更严重。

[root@localhost ~]# ll -sh
total 4.4G
4.0K -rw-------. 1 root root 1.8K Nov 27  2021 anaconda-ks.cfg
4.4G -rw-r--r--. 1 root root 4.4G Nov 27  2021 CentOS-7-x86_64-DVD-2009.iso
4.0K -rw-r--r--. 1 root root  254 Nov 27  2021 deploy.sh
   0 drwxr-xr-x. 2 root root    6 Nov 27  2021 Desktop
   0 drwxr-xr-x. 2 root root    6 Nov 27  2021 Documents
   0 drwxr-xr-x. 2 root root    6 Nov 27  2021 Downloads
4.0K -rw-r--r--. 1 root root 1.8K Nov 27  2021 initial-setup-ks.cfg
892K -rw-r--r--. 1 root root 890K Apr 17  2017 linux-nginx-1.10.2.tar.gz
   0 drwxr-xr-x. 3 root root   17 Nov 27  2021 log
   0 drwxr-xr-x. 2 root root    6 Nov 27  2021 Music
   0 drwxr-xr-x. 9 1001 1001  186 Nov 27  2021 nginx-1.10.2
   0 drwxr-xr-x. 2 root root    6 Nov 27  2021 Pictures
   0 drwxr-xr-x. 2 root root    6 Nov 27  2021 Public
   0 drwxr-xr-x. 2 root root    6 Nov 27  2021 Templates
   0 drwxr-xr-x. 2 root root    6 Nov 27  2021 Videos
   0 drwxr-xr-x. 3 root root   33 Nov 27  2021 wiki

利用parted进行通用分区

上述命令挂载,我们都需要使用parted查看文件格式使用相应fdisk/gdisk进行挂载,实际上我们完全可以使用

# 查看当前分区情况
[root@localhost proc]# parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 22.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  1075MB  1074MB  primary  xfs             boot
 2      1075MB  21.5GB  20.4GB  primary                  lvm
 3      21.5GB  21.5GB  52.4MB  primary  linux-swap(v1)

# 创建一个新的分区 大小为500M
[root@localhost proc]# parted /dev/sda mkpart primary fat32 21.5GB 22.0GB
Information: You may need to update /etc/fstab.


# 查看是否成功
[root@localhost proc]# parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 22.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  1075MB  1074MB  primary  xfs             boot
 2      1075MB  21.5GB  20.4GB  primary                  lvm
 3      21.5GB  21.5GB  52.4MB  primary  linux-swap(v1)
 4      21.5GB  21.5GB  1049kB  primary                  lba


[root@localhost proc]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   21G  0 disk
├─sda1            8:1    0    1G  0 part /boot
├─sda2            8:2    0   19G  0 part
│ ├─centos-root 253:0    0   17G  0 lvm  /
│ └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
├─sda3            8:3    0   50M  0 part [SWAP]
└─sda4            8:4    0    1M  0 part
sr0              11:0    1 1024M  0 rom

# 设置格式为vfat
[root@localhost proc]# mkfs -t vfat /dev/sda4
mkfs.fat 3.0.20 (12 Jun 2013)
[root@localhost proc]# blkid /dev/sda4
/dev/sda4: SEC_TYPE="msdos" UUID="40B4-F19C" TYPE="vfat"

# 编辑配置文件设置为开机自动挂载 内容为  UUID="40B4-F19C" /data/win vfat defaults 0 0
[root@localhost proc]# vim /etc/fstab

# 创建挂载目录
[root@localhost proc]# mkdir -p /data/win

# 挂载
[root@localhost proc]# mount -a

# 查看挂载是否成功,可以看到虽然挂载成功,但是由于笔者扩展空间不足,实际上到手的空间只有1004K
[root@localhost proc]# df -h /data/win/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4      1004K     0 1004K   0% /data/win

更多命令可参考

[root@study ~]#  parted [ 装 置 ] [ 指令 [ [ 参数 ]]
选项与参数:
指令功能:
新增分区:mkpart [primary|logical|extended] [ext4|vfat|xfs] 开始 结束
显示分区:print
删除分区:rm [partition]

参考文献

鸟哥的Linux私房菜

循序渐进Linux(第2版)

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark-chili

您的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值