故障模拟
创建一个100k大小的文件系统
创建一个100k大小的文件
[root@oldboy ~]# dd if=/dev/zero of=/tmp/100k bs=1k count=100
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.106309 s, 963 kB/s
dd命令作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
dd if=/dev/zero of=/tmp/100k bs=1k count=100
input file output file block size 数量
从哪里获取数据 输出文件 每次复制多大(10k 1M)
/dev/zero #白洞 源源不断输出
/dev/null #黑洞
/dev/urandom #设备文件
检查大小
[root@oldboy ~]# ll -h /tmp/100k
-rw-r--r--. 1 root root 100K May 13 13:36 /tmp/100k
创建文件系统
[root@oldboy ~]# mkfs.ext4 /tmp/100k
mke2fs 1.42.9 (28-Dec-2013)
/tmp/100k is not a block special device. ##提示他不是一个·块设备
Proceed anyway? (y,n) y ##回复y即可
Filesystem too small for a journal
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
16 inodes, 100 blocks
5 blocks (5.00%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
16 inodes per group
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
查看文件类型
[root@oldboy ~]# file /tmp/100k
/tmp/100k: Linux rev 1.0 ext2 filesystem data, UUID=6cf23b5b-00da-4757-b9fd-f7d92e7492e8 (extents) (64bit) (huge files)
挂载到/app/log/
[root@gebangfeng ~]# mkdir -p /app/log
[root@gebangfeng ~]# mount /tmp/100k /app/log
检查是否挂载成功
![9469008-ec3eff1912df8419.png](https://i-blog.csdnimg.cn/blog_migrate/efbeedb54d89d4bc4794c6d6442e6257.png)
检查inode大小
![9469008-e7240ea81c6e3504.png](https://i-blog.csdnimg.cn/blog_migrate/a9a156f5c2477176b33b738f7fbc0c9f.png)
上图表示inode 大小为16个 以使用11个。表示只能再使用5个。
模拟inode满了
在/app/log下创建10个文件
[root@gebangfeng ~]# cd /app/log
[root@gebangfeng /app/log]# touch oldboy{01..10}.txt
touch: cannot touch ‘oldboy06.txt’: No space left on device
touch: cannot touch ‘oldboy07.txt’: No space left on device
touch: cannot touch ‘oldboy08.txt’: No space left on device
touch: cannot touch ‘oldboy09.txt’: No space left on device
touch: cannot touch ‘oldboy10.txt’: No space left on device
我愿意要创建10个文件,创建5个之后就提示 No space left on device
表示磁盘没有空余空间
然后检查磁盘是否真的满了
[root@gebangfeng /app/log]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.7G 18G 9% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.7M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sdb1 98M 5.3M 93M 6% /mnt
/dev/sda1 197M 105M 93M 54% /boot
/dev/loop0 93K 14K 72K 17% /app/log
使用df命令检查却并没有满
检查inode是否满了
[root@gebangfeng /app/log]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 9858560 60484 9798076 1% /
devtmpfs 250786 406 250380 1% /dev
tmpfs 253511 1 253510 1% /dev/shm
tmpfs 253511 753 252758 1% /run
tmpfs 253511 16 253495 1% /sys/fs/cgroup
/dev/sdb1 51712 3 51709 1% /mnt
/dev/sda1 102400 326 102074 1% /boot
tmpfs 253511 1 253510 1% /run/user/1000
tmpfs 253511 1 253510 1% /run/user/0
/dev/loop0 16 16 0 100% /app/log
解析:原来·是目录的inode满了。df 默认是查看分区的block.要查看inode需要使用df -i命令
预备知识
Linux下面删除大量小文件(文件) Argument list too long 解决流程
新建一个目录并在目录下创建大量的文件
[root@gebangfeng ~]# mkdir test
[root@gebangfeng ~]# touch test/{1..400000}
-bash: /bin/touch: Argument list too long
Argument list too long 意思表示列表过长。意思就是说我创建的文件太多了
解决
[root@gebangfeng ~]# echo test/{1..400000}|xargs touch
[root@gebangfeng ~]# ls test/ |wc -l
400000
如何删除大量文件·
[root@gebangfeng ~]# find test/ -type f |xargs rm -f
[root@gebangfeng ~]# ls test/ |wc -l
0
Linux文件删除原理:
Linux彻底删除1个文件的条件:
1.没有入口(rm 硬链接数为0) oldboy.txt /etc/hosts
2.没有人使用这个文件(进程调用数为0) 重启这个服务
yum install lsof -y 安装lsof命令
lsof list open files 显示系统中所有被打开的文件(使用中)
[root@oldboyedu59 ~]# lsof |grep alex.txt
tail 14737 root 3r REG 8,3 0 134348620 /root/alex.txt
命令或服务 文件大小 inode 文件
[root@oldboyedu59 ~]# lsof |grep alex.txt
vim 14935 root 4u REG 8,3 12288 134348621 /root/.alex.txt.swp
模拟文件没有被彻底删除导致磁盘空间不足
环境准备
创建一个超级大的文件并且追加到 /var/log/messages
[root@gebangfeng ~]# seq 500000000 >>/var/log/messages
执行这个命令时间会比较久
故障案例
[root@gebangfeng ~]# seq 10000 >>/oldboy.txt
seq: write error: No space left on device
No space left on device表示空间不足。有两种可能一个是inode满了,一个是bloc满了
这个故障是往文件里写东西。有可能是block满了。因为这里面放的是文件的内容。
查看磁盘整体使用情况
![9469008-2c4acd46cb8d9604.png](https://i-blog.csdnimg.cn/blog_migrate/b857e09befb5bdb38c4901b3daae394a.png)
发现/已经满了。现在需要找出导致/满的文件
![9469008-264977ae69b4176a.png](https://i-blog.csdnimg.cn/blog_migrate/7a3ccf3f8c254fcee13911c8a085f258.png)
![9469008-9d481920e351a743.png](https://i-blog.csdnimg.cn/blog_migrate/aacbc9e8ed2e23029fd2d403b3c49280.png)
发现是/var那么继续往下找
![9469008-8004c1fea2a57638.png](https://i-blog.csdnimg.cn/blog_migrate/7ab1457163d162e36b66cde10b4cc48b.png)
已经找到了
![9469008-81dd864328f989f7.png](https://i-blog.csdnimg.cn/blog_migrate/ad6e4f5e0b29555aef7279159e5edd75.png)
删除导致磁盘满的文件
![9469008-6d9dc10829c96d2a.png](https://i-blog.csdnimg.cn/blog_migrate/8759a11b633a0f61e354cab5264e0e7a.png)
删除后却发现/分区还是满的,
解决
[root@oldboy ~]# lsof |grep messages
abrt-watc 6444 root 4r REG 8,3 12555560589 42236 /var/log/messages
rsyslogd 7106 root 7w REG 8,3 12555560589 42236 /var/log/messages
in:imjour 7106 7366 root 7w REG 8,3 12555560589 42236 /var/log/messages
rs:main 7106 7369 root 7w REG 8,3 12555560589 42236 /var/log/messages
abrt-dump 7404 root 0r REG 8,3 12555560589 42236 /var/log/messages
这是查看文件删除后,还被占用中的文件rsyslogd 为系统日志服务。系统日志就是这个服务写入的。abrt-dump也是
重启这两个服务
[root@oldboy ~]# systemctl restart rsyslog.service abrtd.service
[root@oldboy ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 20G 3.5G 17G 18% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 14M 473M 3% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 197M 133M 64M 68% /boot
tmpfs 98M 0 98M 0% /run/user/0
这样就解决了
添加sawp容量
sawp分区为交换分区.他是当系统内存 不足时充当内存使用的。不过之前我们都是安装系统的时候换分的sawp分区。可是你买一台云服务器默认没有swap分区的。那么我们后期如何添加呢?
用dd命令生成指定大小的文件
[root@gebangfeng ~]# dd if=/dev/zero of=/tmp/500M bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 11.8038 s, 44.4 MB/s
进行格式化
[root@gebangfeng ~]# mkswap /tmp/500M
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=655f6e67-6dbd-4c66-bfae-e4f41aa62f98
进行临时挂载
[root@gebangfeng ~]# chmod 600 /tmp/500M
[root@gebangfeng ~]# swapon /tmp/500M
[root@gebangfeng ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 122M 1.1G 9.5M 757M 1.6G
Swap: 1.5G 0B 1.5G
永久挂载
[root@gebangfeng ~]# tail -n1 /etc/rc.local
swapon /tmp/500M
直接把命令写入开机自启动文件/etc/rc.local.要注意的是这个文件要给他执行权限。因为他本身就是一个脚本。
文件系统及应用场景
m reiserfs大量小文件业务首选reiserfs(100K以内), 单独安装。
m xfs有的门户的数据库MySQL业务会选择xfs。
m ext4 视频下载,流媒体,数据库,小文件业务也OK,可以用默认的。
m ext2 没有日志,蓝汛、网宿的cache业务,CDN 网站加速服务的。