1、磁盘管理体系概述
第一层:物理硬盘,比如:/dev/sda、:/dev/sdb、/dev/sdc...
第二层:RAID、lvm
第三层:分区、分区表、fdisk、parted
第四层:格式化,挂载
第五层:磁盘管理,如:df、fdisk、parted、swap、fstab文件等
2、磁盘基础
1)概述
内存:临时存放、断电后丢失
磁盘:永久保存
2)分类
机械硬盘(HDD):电机带动磁盘高速旋转,读取数据,速度可达到5400、7200rpm(每分钟5400转、7200转)
固态硬盘(SSD):集成电路与芯片,储存芯片
3)磁盘接口
硬盘接口不同,有着不同的读写速度。
磁盘接口分类
SATA:一般家用,一般用于机械硬盘,也有固态硬盘,容量大,价格低
SAS:给企业级环境使用,一般用于机械硬盘,也有固态硬盘
PCI-E:企业级使用,固态硬盘
U.2:企业级固态硬盘使用,PCI-E类似
m.2:nvme固态,一般用于笔记本
4)企业级硬盘选型
磁盘选型
一般情况下,数据备份:SATA硬盘,10k rpm,4T、8T容量
网站服务器使用:SAS接口,15k rpm,300G、600G、900G
高并发网站服务器:固态硬盘PCI-E,SAS,SATA
rpm:round per minute,每分钟多少转
5)机械 vs 固态

固态硬盘存储颗粒:SLC、TLC、MLC、3D、Nand
6)磁盘内部结构
机械硬盘内部组成
盘片:实际存放数据的地方
磁头:贴近盘片,读写数据
磁道:磁盘中的圆环形区域,从0开始
扇区:磁盘上最小的存储单元,默认512字节
柱面:不同盘面上相同的磁道组成的形状
3、RAID
1)概述
在物理服务器中,往往有多快硬盘,这些硬盘并不是直接使用,而是通过raid卡(设备)进行统一管理
大部分需要做raid后才能安装系统,部署服务
raid磁盘冗余阵列,管理磁盘方式
2)特点
根据用户所设置的Raid级别,可以获取如下一个或多个特点:
a、可以获取更高的容量
b、可以获取更高的性能
c、可以获取更高的冗余(安全)
一般情况下,无法同时满足上面3个特点
3)raid级别
raid级别就是对这些硬盘的管理方式
raidji级别 | 最少需要几块硬盘 | 安全冗余 | 可用容量 | 性能 | 应用场景 | 举例 | |
条带串联 | raid 0 | 1 | 最低 | 所有硬盘容量的和 | 读写最快 | 不要求安全,只要求速度 | 数据从库、存储从库、web服务器 |
镜像 | raid 1 | 2 | 100% | 容量总和的一半 | 写入速度慢,读取速度可以 | 只追求安全性,对速度没要求 | 系统盘、监控服务器 |
raid 5 | 3 | 最多损坏一块 | 损失一块硬盘的容量 | 写入性能不好,读取速度可以 | 对安全速度不高 | 普通数据库,存储访问量不高 | |
raid 10 | 4 | 可以损坏一半 | 损失所有硬盘一半的容量 | 读写速度快 | 对于安全和性能都要 | 高并发或高访问量数据库主库存储 |
4、磁盘分区
磁盘分区:主分区、扩展分区、逻辑分区。MBR、GPT
1)概述
MBR:Master Boot Record,每一块硬盘上面存放磁盘引导程序,引导程序在磁盘开头部分,用于引导系统,
位置:磁盘分区表,磁盘的开始部分:0磁头,0磁道,1扇区(512字节)
这512字节存放了:
引导程序:446字节(MBR)
磁盘分区表:4个分区表(共64字节)
结束标记:55AA,2字节
MBR简单示意图:

分区表64字节,每个分区占用16字节,因此,最多只有4个分区
这4个分区叫做主分区
如果只划分1个分区使用所有空间,将无法继续划分分区
如果划分了4个分区,但磁盘空间还有剩余,那么剩余的空间将无法继续使用
扩展分区使用于解决主分区数量问题主分区只能有4个的问题,扩展分区无法直接使用,需要在扩展分区下面创建逻辑分区,存在数据。
逻辑分区只在扩展分区中,用于存放数据。
分区使用MBR形式,主分区+扩展分区 ,最多4个,扩展分区只能有1个。扩展分区用于创建逻辑分区。
未来分区是在安装系统的时候创建与规划的,安装系统后增加硬盘直接使用或者划分1个分区。
2)磁盘及分区命名
磁盘分区或分区文件放在/dev/下面
磁盘命名:
#磁盘接口
sas/sata/scsi接口的硬盘:硬盘名字以sd开头
虚拟机(kvm)/公有云: 硬盘名字以vd开头
#第几块硬盘:通过字母表示,从a开始,如:
/dev/sda
#第1块(sas接口)硬盘
/dev/sda
分区命名:
分区命名,是根据分区类型进行命名
主分区、扩展分区:1-4
逻辑分区:从5开始
比如:
第2块sata硬盘的第1个分区:/dev/sdb1
第5块公有云盘的第3个分区:/dev/vde3
5、磁盘分区实战
1)概述
一块硬盘分区三部曲:
打隔断:分区操作
装修、格式化:创建文件系统
安装门窗:挂载(命令、配置文件)
Linux设备(光盘、磁盘)不挂载就无法使用
挂载:给设备设置个入口,如果不挂载,则这个设备无法访问
2)分区实战
实战环境准备:添加2块硬盘(scsi),每个1g
1、添加2块scsi硬盘,每个1g,如下:

设置大小:

添加完成如下:

添加完成后,重启系统。查看一下磁盘信息:
[root@linux-87-01 ~]# fdisk -l | grep '/dev/sd'
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Disk /dev/sdc: 1073 MB, 1073741824 bytes, 2097152 sectors
Disk /dev/sdd: 3221.2 GB, 3221225472000 bytes, 6291456000 sectors
[root@linux-87-01 ~]#
2、分区
案例01:sdb硬盘创建20MB的分区
分区参数解释:
p:print,输出磁盘分区信息
n:new,创建分区
w:write,保存退出
d:delete,删除分区
q:quit,退出不保存
具体操作:
#执行分区命令
[root@linux-87-01 ~]# 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 0x082efbdb.
#创建20MB分区
Command (m for help): n # n:创建分区
Partition type: #提示选择类型,默认是主分区
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): #输入p,创建主分区
Using default response p
Partition number (1-4, default 1): #分区号码,默认是1
First sector (2048-2097151, default 2048): #直接回车,使用默认起点
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +20M #+20M,大小20MB
Partition 1 of type Linux and of size 20 MiB is set
Command (m for help): w # w,写入保存,退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
再创建1个扩展分区,大小为:剩余的全部容量

扩展分区创建后,就可以创建逻辑分区:
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l #l:逻辑分区
Adding logical partition 5
First sector (45056-2097151, default 45056):
Using default value 45056
Last sector, +sectors or +size{K,M,G} (45056-2097151, default 2097151): +10M
Partition 5 of type Linux and of size 10 MiB is set
输入p就可以查看分区信息:
Command (m for help): p
Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x082efbdb
Device Boot Start End Blocks Id System
/dev/sdb1 2048 43007 20480 83 Linux
/dev/sdb2 43008 2097151 1027072 5 Extended
/dev/sdb5 45056 65535 10240 83 Linux
Command (m for help):
案例02:创建一个分区使用硬盘所有容量
把刚才分区的/dev/sdb删除后,再分区
#删除已有的分区
Command (m for help): d
Partition number (1,2,5, default 5):
Partition 5 is deleted
Command (m for help): d
Partition number (1,2, default 2):
Partition 2 is deleted
Command (m for help): d
Selected partition 1
Partition 1 is deleted
Command (m for help):
#重新分区
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): #不设置大小,默认使用全部空间
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set
Command (m for help):
查看一下:
[root@linux-87-01 ~]# ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 May 19 22:45 /dev/sdb
brw-rw---- 1 root disk 8, 17 May 19 22:45 /dev/sdb1
[root@linux-87-01 ~]#
注意:
fdisk分区:基于mbr分区表,且磁盘小于2TB,否则无法使用fdisk进行分区
大磁盘(大于2TB)、gpt磁盘:用parted命令
3)格式化
格式化,也就是创建文件系统。可以使用mkfs命令。
mkfs:make filesystem
命令格式:
mkfs.文件系统类型 磁盘或分区
文件系统类型:
xfs:centos 7默认的文件系统类型
ext4:用于centos 6或公有云
查看分区文件系统:df -Th
[root@linux-87-01 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.2G 0 1.2G 0% /dev
tmpfs tmpfs 1.2G 0 1.2G 0% /dev/shm
tmpfs tmpfs 1.2G 9.6M 1.2G 1% /run
tmpfs tmpfs 1.2G 0 1.2G 0% /sys/fs/cgroup
/dev/mapper/centos_linux--87--01-root xfs 17G 1.9G 16G 12% /
/dev/sda1 xfs 1014M 138M 877M 14% /boot
tmpfs tmpfs 245M 0 245M 0% /run/user/0
[root@linux-87-01 ~]#
格式化,比如:
[root@linux-87-01 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=65472 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=261888, 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@linux-87-01 ~]#
4)挂载
Linux设备,需要挂载才能使用,挂载就是给设备指定入口(已经存在的目录)
挂载命令:mount
卸载命令:umount 命令格式: umount 挂载点
入口:也叫挂载点,一般是个空目录即可。一般用于临时挂载的目录:/mnt/
命令格式:mount 设备 目录
比如:把上面的/dev/sdb1挂载到/mnt目录:
#临时挂载,系统重启后,挂载失效
[root@linux-87-01 ~]# mount /dev/sdb1 /mnt/
[root@linux-87-01 ~]# df -Th
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 1020M 33M 988M 4% /mnt
[root@linux-87-01 ~]#
5)永久挂载
一般情况下,我们需要临时+永久挂载
实行永久挂载的方案:
方案1:使用rc.local文件,把挂载命令:“mount 设备 目录”写入/etc/rc.d/rc.local文件
中,注意:命令最好为绝对路径
方案2:在/etc/fstab文件配置
/etc/fstab文件内容如下:
/dev/mapper/centos_linux--87--01-root / xfs defaults 0 0
UUID=5fcb5343-5fae-4d6c-9ab7-70192094f758 /boot xfs defaults 0 0
/dev/mapper/centos_linux--87--01-swap swap swap defaults 0 0
内容共有6列,每一列的含义:

UUID为设备的ID号码,每个设备唯一
如何查看设备的UUID?
使用blkid命令,例如:
[root@linux-87-01 ~]# blkid
/dev/sda1: UUID="5fcb5343-5fae-4d6c-9ab7-70192094f758" TYPE="xfs"
/dev/sda2: UUID="Jn6hKw-eiw5-8VQ0-obaR-fOHl-JRD1-63Ft3q" TYPE="LVM2_member"
/dev/sdb1: UUID="f6d37937-8e22-4ddf-b54d-424a27472091" TYPE="xfs"
/dev/mapper/centos_linux--87--01-root: UUID="8a9cb5f5-9e1c-48eb-8711-2190808bfaa4" TYPE="xfs"
/dev/mapper/centos_linux--87--01-swap: UUID="637de51a-6a88-4381-8ae0-f8227560c9ef" TYPE="swap"
[root@linux-87-01 ~]#
6、MBR vs GPT
分区表 | 特点 | 对应命令 |
---|---|---|
mbr | 支持2TB以内的硬盘,大于2TB的则只识别2TB,区别主分区、扩展分区、逻辑分区 | fdisk/parted |
gpt | 支持大容量硬盘,主分区无限使用(可以支持100多个主分区) | gdisk/parted |
案例1:创建gpt格式的分区,大小为10Mb
#查看硬盘分区信息
[root@linux-87-01 ~]# parted /dev/sdc print
#编辑/dev/sdc
[root@linux-87-01 ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
#创建分区表gpt格式
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable gpt # 或者使用mklabel gpt,注意:mbr的话叫做msdos类型
#创建分区,大小为10MB
(parted) mkpart primary 0 10 # 或者:(parted) mkpart primary 10 20
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
#分多几个
(parted) mkpart primary 10 20
(parted) mkpart primary 20 30
#查看分区
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 10.0MB 9983kB primary
2 10.5MB 19.9MB 9437kB primary
3 19.9MB 30.4MB 10.5MB primary
(parted)
跟mbr,不同的是,分区即可生效。
删除分区:rm 分区
例如:
(parted) rm 3
退出:q或quit
有一块3T的硬盘:
[root@linux-87-01 ~]# fdisk -l | grep sdd
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use
Disk /dev/sdd: 3221.2 GB, 3221225472000 bytes, 6291456000 sectors
[root@linux-87-01 ~]#
使用fdisk看看:

提示:超过2T,要使用gpt。mbr最多支持2T
7、swap
swap:交换分区,当内存不足的时候,临时充当内存,占用的磁盘空间。
问题:假如服务器运行java程序,占用大量内存,以至于开始占用swap,如何解决?
增加swap空间。
1、创建指定大小的文件(比如,创建1g的文件)
2、把文件转换为swap
3、激活这个swap,把它加入到Linux中
4、配置永久挂载
操作过程:
#1、创建大小为1g的文件
[root@linux-87-01 ~]# dd if=/dev/zero of=/tmp/1g bs=1M count=1024
#2、把文件转换为swap(即格式化)
[root@linux-87-01 ~]# mkswap /tmp/1g
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=244cd031-550e-4c9d-a372-a981ef838898
[root@linux-87-01 ~]#
#查看一下:
[root@linux-87-01 ~]# file /tmp/1g
/tmp/1g: Linux/i386 swap file (new style), version 1 (4K pages), size 262143 pages, no label, UUID=244cd031-550e-4c9d-a372-a981ef838898
[root@linux-87-01 ~]# free -h
total used free shared buff/cache available
Mem: 2.4G 217M 1.0G 9.4M 1.2G 2.0G
Swap: 2.0G 0B 2.0G
[root@linux-87-01 ~]#
#3、激活,加入Linux中
[root@linux-87-01 ~]# swapon /tmp/1g #激活
swapon: /tmp/1g: insecure permissions 0644, 0600 suggested.
[root@linux-87-01 ~]# chmod 0600 /tmp/1g
#查看一下:
[root@linux-87-01 ~]# free -h
total used free shared buff/cache available
Mem: 2.4G 218M 1.0G 9.4M 1.2G 2.0G
Swap: 3.0G 0B 3.0G
[root@linux-87-01 ~]#
#4、永久挂载
#方法1:配置/etc/fstab
[root@linux-87-01 ~]# vim /etc/fstab
/tmp/1g swap defaults 0 0
#方法2:将swapon /tmp/1g 写入/etc/rc.d/rc.local文件
参数解释:
if:input file,输入文件/dev/zero,不断输出空。
of:output file,输出文件
bs:block size,每次读出多少
count:读取次数
bs=1M count=1024:每次读1M,读取1024次,那么大小是:1*1024
关闭swap:
[root@linux-87-01 ~]# swapoff /tmp/1g
#关闭全部swap
swapoff -a
8、磁盘分区方案
即使系统重新安装,用户的数据不能丢失。
1、分区方案
1)方案1:服务器存放的数据,不重要
/boot/ :引导分区,引导系统启动与存放引导文件、存放系统内核镜像。推荐1G即可
swap:根据实际物理内存配置,大于8G,swap配置8G;内存小于8G,则配置为内存的1.5或2倍,最大8G。补充:公有云的话,可以不配置swap,如果是运行java,建议配置
/ :分区,所有剩余空间分配给根分区
2)方案2:服务器存放重要的数据
/boot/ :引导分区,引导系统启动与存放引导文件、存放系统内核镜像。推荐1G即可
swap :根据实际物理内存配置,大于8G,swap配置8G;内存小于8G,则配置为内存的1.5或2倍,最大8G。补充: 公有云的话,可以不配置swap,如果是运行java,建议配置
/ :根分区,40-200G,主要安装一些软件。重要数据单独存放
/data/:剩余的所有空间(分区名根据实际情况定义)
3)方案3:不知道是否重要
/boot/ :引导分区,引导系统启动与存放引导文件、存放系统内核镜像。推荐1G即可
swap :根据实际物理内存配置,大于8G,swap配置8G;内存小于8G,则配置为内存的1.5或2倍,最大8G。补充:公有云的话,可以不配置swap,如果是运行java,建议配置
/ :根分区,40-200G,主要安装一些软件。重要数据单独存放
剩余空间不划分:未来谁使用谁划分
2、分区实战
创建/boot分区:1G
swap分区:2G
/分区:5G
/data分区:剩余所有空间。
分区使用标准模式:

/boot分区:

/data分区:

创建完成后如下图:

LVM使用建议:
lvm:逻辑卷
优点:可以动态调整分区大小
缺点:软件实现,效率低
未来可以搭配raid+lvm使用,或者直接raid,不使用lvm
9、磁盘空间不足
Linux系统中,导致磁盘空间不足的常见原因有3个:
原因1:大文件,数量多,导致的空间不足,Block不足
原因2:大量的小文件,数量非常多,导致inode不足
原因3:有些文件因为进程的调用,没有彻底删除,导致磁盘空间不足
1)原因1
大文件,数量多,导致的空间不足,Block不足
a)故障模拟
使用dd命令创建大文件
[root@linux-87-01 ~]# dd if=/dev/zero of=/var/log/big-file bs=1M count=6000
b)排查
使用df -h命令查看哪个分区是否满了
通过du -sh分析,是哪个目录或文件占用空间多
[root@linux-87-01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.2G 0 1.2G 0% /dev
tmpfs 1.2G 0 1.2G 0% /dev/shm
tmpfs 1.2G 9.5M 1.2G 1% /run
tmpfs 1.2G 0 1.2G 0% /sys/fs/cgroup
/dev/mapper/centos_linux--87--01-root 17G 12G 5.7G 67% /
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 245M 0 245M 0% /run/user/0
[root@linux-87-01 ~]# du -sh /* | sort -rhk1
使用df -h命令,发现根目录占用空间大。
再通过du -sh /*命令,发现/var目录占用空间大
然后,使用du 命令查看/var目录:
[root@linux-87-01 ~]# du -sh /var/* | sort -rhk1
8.1G /var/log
216M /var/cache
发现,/var/log目录占用空间大,进一步分析:
[root@linux-87-01 ~]# du -sh /var/log/* | sort -rhk1
8.0G /var/log/big-file
2.7M /var/log/vmware-vmsvc-root.log
至此,找到了一个大文件(就是刚才创建的用于测试的)
然后,确认是否可以删除。这里只是测试用,删除即可。
一层一层排查
2)原因2
大量的小文件,数量非常多,导致inode不足。
每创建1个文件,需要1个inode,用于存储文件属性信息。
inode数量在磁盘格式化的时候固定。
一般情况下,block消耗快,但是一些服务可能有异常,会生成大量的小文件(不足4KB的文件),此时,就会占用大量的inode。
a)故障模拟
df -i:查看inode使用情况
#1、创建一个小分区(10M),来模拟。
#使用dd命令创建一个10Mb的文件:/tmp/10m
[root@linux-87-01 ~]# dd if=/dev/zero of=/tmp/10m bs=1M count=10
#2、格式化
[root@linux-87-01 ~]# mkfs.ext4 /tmp/10m
#3、创建一个/inode目录,把/tmp/10m挂载到该目录
[root@linux-87-01 ~]# mkdir -p /inode
[root@linux-87-01 ~]# mount /tmp/10m /inode/
#4、查看挂载情况
[root@linux-87-01 ~]# df -h | grep inode
/dev/loop0 8.7M 172K 7.9M 3% /inode
#5、查看inode使用情况
[root@linux-87-01 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop0 2560 11 2549 1% /inode
inode已使用11
创建大量文件:
[root@linux-87-01 ~]# cd /inode/
[root@linux-87-01 inode]# touch {01..2560}.txt
touch: cannot touch ‘2550.txt’: No space left on device
touch: cannot touch ‘2551.txt’: No space left on device
touch: cannot touch ‘2552.txt’: No space left on device
touch: cannot touch ‘2553.txt’: No space left on device
touch: cannot touch ‘2554.txt’: No space left on device
touch: cannot touch ‘2555.txt’: No space left on device
touch: cannot touch ‘2556.txt’: No space left on device
touch: cannot touch ‘2557.txt’: No space left on device
touch: cannot touch ‘2558.txt’: No space left on device
touch: cannot touch ‘2559.txt’: No space left on device
touch: cannot touch ‘2560.txt’: No space left on device
[root@linux-87-01 inode]#
提示:没有空间了
b)排查
#使用df -h查看
[root@linux-87-01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 8.7M 230K 7.8M 3% /inode
[root@linux-87-01 ~]#
发现,磁盘空间充足。继续排查
#df -i查看inode
[root@linux-87-01 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop0 2560 2560 0 100% /inode
[root@linux-87-01 ~]#
发现,inode不足。
解决:删除测试用的文件即可。
#未来,真的inode用完,需要找出大量的小文件,然后分析是否没有用了,然后删除
#方法01:找出系统中较大的目录(大于1MB)
find / -type d -size +1M
#方法02
find / -type f | xargs dirname | sort | uniq -c | sort -rn | head
方法的思想:执行命令:find / -type f 的时候,如果某个目录的文件越多,它的目录名称出现的越多。然后排序,去重,找到每个目录名出现次数。
一个报错信息:
[root@linux-87-01 inode]# touch {01..350000}.txt
-bash: /usr/bin/touch: Argument list too long
[root@linux-87-01 inode]#
报错:参数列表太长
原因:后面的文件名太多了。
解决:使用管道
[root@linux-87-01 inode]# echo touch {01..350000}.txt | xargs touch
删除:
[root@linux-87-01 inode]# rm -f ./*
#同样也会报错:参数列表太长
#使用管道即可
[root@linux-87-01 inode]# ls | xargs rm -f
3)原因3
有些文件因为进程的调用,没有彻底删除,导致磁盘空间不足。
文件被彻底删除的条件:
1、rm删除,没有入口,硬链接数为0
2、进程调用数为0,也是就是这个文件没有被其他服务使用
a)故障模拟
创建文件var/log/big-file:
[root@linux-87-01 ~]# dd if=/dev/zero of=/var/log/big-file bs=1M count=6000
查看根分区空间使用情况:
[root@linux-87-01 ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_linux--87--01-root 17G 7.8G 9.3G 46% /
[root@linux-87-01 ~]#
使用tail -f命令查看/var/log/big-file
[root@linux-87-01 ~]# tail -f /var/log/big-file
如下图:

重新打开另外一个窗口,执行删除/var/log/big-file文件,再查看根分区空间:
#删除/var/log/big-file文件前,根分区使用情况
[root@linux-87-01 ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_linux--87--01-root 17G 7.8G 9.3G 46% /
#删除/var/log/big-file文件后,根分区使用情况
[root@linux-87-01 ~]# rm -f /var/log/big-file
[root@linux-87-01 ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_linux--87--01-root 17G 7.8G 9.3G 46% /
[root@linux-87-01 ~]#
发现:删除/var/log/big-file文件,根分区空间没有变化。/var/log/big-file文件有没删除?
[root@linux-87-01 ~]# ll /var/log/big-file
ls: cannot access /var/log/big-file: No such file or directory
[root@linux-87-01 ~]#
文件已删除,但空间没有释放。
因为:tail -f /var/log/big-file 命令一直在执行。
解决方法:结束tail -f /var/log/big-file 命令
问题:怎么找到那些入口没有了、但还被其他进程(软件、命令)调用的文件?
b)排查
找出这种没有彻底删除的文件,找出对应的服务,重启该服务。
安装lsof:
#使用lsof命令找出这样的文件
[root@linux-87-01 ~]# lsof | grep delete
tail 17657 root 3r REG 253,0 6291456000 17461419 /var/log/big-file (deleted)
#终止tail进程即可
kill 17657
参数解释:

查看分区空间使用情况:df -h、du -sh