磁盘相关命令和磁盘故障案例
No Space Left on Device 磁盘空间不足
Block
排查流程
df -h 查看整体情况
du -sh 一层一层的查找
du -h 每个目录的大小
du -sh 显示目录下所有目录的大小,总计
sort
-r 倒序
-n 按数字顺序排序
-h 人类可读的形式排序
-nr 数字倒序排序
-hr 人类可读形式的倒序排序
确认之后再删除
[16:10 root@oldboy ~]# du -h /var/log/
84K /var/log/tuned
5.1M /var/log/audit
308K /var/log/anaconda
0 /var/log/rhsm
5.0M /var/log/sa
16M /var/log/
[16:10 root@oldboy ~]# du -sh /var/log/
16M /var/log/
[16:16 root@oldboy ~]# du -sh /var/*|sort -n
....
0 /var/preserve
0 /var/run
0 /var/tmp
0 /var/yp
8.0K /var/db
16M /var/log
77M /var/spool
144M /var/lib
315M /var/cache
[16:20 root@oldboy ~]# du -sh /var/*|sort -nr
315M /var/cache
144M /var/lib
77M /var/spool
16M /var/log
8.0K /var/db
0 /var/yp
0 /var/tmp
0 /var/run
0 /var/preserve
一、创建1个100k磁盘
dd if=/dev/zero of=/tmp/100k bs=1k count=100
从哪里获取数据 输出文件 每次复制多大 数量
input file output file block size
1.第一步:
[09:44 root@oldboy ~]#第一步—创建
[09:44 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.000358845 s, 285 MB/s
[09:49 root@oldboy ~]# ll -h /tmp/100k \\查看
-rw-r--r-- 1 root root 100K May 13 09:44 /tmp/100k
[09:49 root@oldboy ~]# file /tmp/100k \\显示文件类型
/tmp/100k: data
2.第二步—格式化
[09:54 root@oldboy ~]#第二步—格式化
[09:54 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 \\是否确认格式化
[16:29 root@oldboy ~]# file /tmp/100k \\显示文件类型
/tmp/100k: Linux rev 1.0 ext2 filesystem data, UUID=6bafdcd3-
2ff2-4026-a7a6-343ad04a3f37 (extents) (64bit) (huge files)
3.第三步—挂载
[09:55 root@oldboy ~]##第三步—挂载
[09:55 root@oldboy ~]# mkdir /app/log/ \\创建一个目录
[09:56 root@oldboy ~]# mount /tmp/100k/ /app/log/ \\挂载到/app/log/
[09:56 root@oldboy ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 9.5M 78K 9.4M 1% /
devtmpfs 245K 384 245K 1% /dev
tmpfs 248K 1 248K 1% /dev/shm
tmpfs 248K 734 247K 1% /run
tmpfs 248K 16 248K 1% /sys/fs/cgroup
/dev/sda1 100K 332 100K 1% /boot
tmpfs 248K 1 248K 1% /run/user/0
/dev/loop0 16 11 5 69% /app/log \\16个
4.进入创建
[10:05 root@oldboy ~]# cd /app/log/
[10:05 root@oldboy /app/log]# touch lcx{01..10}.txt \\创建10个文件
touch: cannot touch ‘lcx06.txt’: No space left on device \\设备上没有剩余空间
touch: cannot touch ‘lcx07.txt’: No space left on device
touch: cannot touch ‘lcx08.txt’: No space left on device
touch: cannot touch ‘lcx09.txt’: No space left on device
touch: cannot touch ‘lcx10.txt’: No space left on device
[10:06 root@oldboy /app/log]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.2G 17G 12% /
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/sda1 197M 133M 64M 68% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
二、Linux文件删除原理:
Linux彻底删除一个文件的条件:
1.没有入口(rm 硬链接数位0)
2.没有人使用这个文件(进程调用数为0) ,但是有个例:
/var/log/messages
/var/log/secure
/var/log/cron排查流程:
情况:查看df -h 满了 但是查看du -sh/* 没有满
安装软件 yum install -y lsof 显示系统中运行的文件
lsof |grep delete
lsof标记表示:硬链接数为0 进程调用数不为0
重启服务 systemctl restart +服务
开启两个窗口
第一个窗口:
[10:57 root@oldboy ~]# tail -f alex.txt
第二个窗口查看lsof
[10:57 root@oldboy ~]# lsof |grep alex.txt
tail 2875 root 3r REG 8,3 0 33575026 /root/alex.txt
文件大小 inode 文件
第一个窗口:
[11:01 root@oldboy ~]# vim alex.txt
第二个窗口查看lsof
[11:01 root@oldboy ~]# lsof |grep alex.txt
vim 13002 root 4u REG 8,3 2288 33604239 /root/.alex.txt.swp
模拟文件没有被彻底删除导致磁盘空间不足
往messgaes中写入五亿个数字
[11:20 root@oldboy ~]# seq 500000000 >>/var/log/messages
[11:20 root@oldboy ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 7.0G 12G 37% / \\之前是使用了2.4G,现在是7.0G
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/sda1 197M 133M 64M 68% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
[11:20 root@oldboy ~]# \rm -f /var/log/messages \\把messages 删除掉
[11:20 root@oldboy ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 7.0G 12G 37% / \\还是7.0G 没有删掉吗?
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/sda1 197M 133M 64M 68% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
[11:22 root@oldboy ~]# lsof |grep messages \\显示一下进程
abrt-watc 6909 root 4r REG 8,3 4889144307 73298 /var/log/messages (deleted)
rsyslogd 7264 root 6w REG 8,3 4889144307 73298 /var/log/messages (deleted)
in:imjour 7264 7282 root 6w REG 8,3 4889144307 73298 /var/log/messages (deleted)
rs:main 7264 7283 root 6w REG 8,3 4889144307 73298 /var/log/messages (deleted)
\\只要最后有delete就表示没有入口了但是还在运行
[11:22 root@oldboy ~]# systemctl restart rsyslog.service abrtd.service \\重启一下messages中的进程
[11:23 root@oldboy ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.4G 17G 13% / \\ 文件彻底删除掉了
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/sda1 197M 133M 64M 68% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
三、1.Linux 下面删除大量小文件(文件) Argument list too long 解决流程
Argument list too long
参数 列表过长 (命令后面的文件太多了)
1.先尝试创建400000个文件
[10:14 root@oldboy ~]# mkdir test
[10:17 root@oldboy ~]# touch test/{1..400000}
-bash: /usr/bin/touch: Argument list too long \\参数列表过长
[10:18 root@oldboy ~]# echo test/{1..400000}|xargs touch \\利用echo创建
[10:19 root@oldboy ~]# ls test/|wc -l \\统计总行数
400000
2.现在尝试删除下面大量的小文件
[10:20 root@oldboy ~]# \rm test/*
-bash: /usr/bin/rm: Argument list too long \\参数列表过长
[10:21 root@oldboy ~]# find test/1*|xargs rm
-bash: /usr/bin/find: Argument list too long \\参数列表过长
rm: missing operand
Try 'rm --help' for more information.
[10:21 root@oldboy ~]# find test/11*|xargs rm \\查找2位以上
[10:21 root@oldboy ~]# ls test/|wc -l
388889
[10:22 root@oldboy ~]# find test/33*|xargs rm
[10:22 root@oldboy ~]# ls test/|wc -l
377778
[10:25 root@oldboy ~]# ls test/1*|xargs rm -f \\ rm的-f参数
[10:25 root@oldboy ~]# ls test/|wc -l
277778 \\删除了一部分
还有一个方法就是直接删除掉目录,在删除之前要确认好再删除
命令不支持文件名字过多
ls或find +|xargs 进行删除或处理,find从当前目录查找比较安全
在删除文件所在目录之前,要记录好权限和所有者
添加"*"会先把所有内容找出来,不加"*"是先给到后面的参数\
磁盘空间不足的原因-inode满了
inode满了 df -h 没有满,df -i 整体哪里满了 找出系统中目录大于1MB的 然后确认之后删除下面的小文件
[16:52 root@oldboy ~]# mkdir lcx
[17:13 root@oldboy ~]# touch lcx/boy{1..50000}
[17:14 root@oldboy ~]# ll -hd lcx/
drwxr-xr-x 2 root root 1.2M May 13 17:14 lcx/
[17:15 root@oldboy ~]# ls lcx/|wc -l
50000
目录的block的大小 block里面存放的是文件名
四、Java故障案例
Java大量占用内存,占用swap
1.如何增加swap分区
查看swap
free -h
[17:22 root@oldboy ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 100M 1.7G 1.1M 163M 1.7G
Swap: 1.1G 148M 975M
第1步-创建指定的大小文件 500m
dd if=/dev/zero of=/tmp/500m bs=1M count=500
第2步-格式化mkfs mkswap
mkswap /tmp/500m
第3三步-挂载 激活
修改权限 chmod 600 /tmp/500m
挂载 swapon /tmp/500m 临时挂载,重启失效
swapoff 关闭
第4步-永久挂载
1./etc/fstab
在CentOS7中通过dd创建文件 增加swap无法使用
除了CentOS7 其他可以正常使用
2./etc/rc.local(CentOS 临时增加swap推荐使用) swapon /tmp/500m
操作步骤:
[17:32 root@oldboy ~]# dd if=/dev/zero of=/tmp/500m bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 4.12744 s, 127 MB/s
[17:32 root@oldboy ~]# mkswap /tmp/500m
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=03e30265-356b-44a6-811b-3fb0f4f2b4f2
[17:36 root@oldboy ~]# swapon /tmp/500m
swapon: /tmp/500m: insecure permissions 0644, 0600 suggested. \\不安全的权限,最好改为600
[17:36 root@oldboy ~]# chmod 600 /tmp/500m \\修改权限
[17:37 root@oldboy ~]# swapon /tmp/500m 挂载
[17:38 root@oldboy ~]# free -h \\查看内存
total used free shared buff/cache available
Mem: 1.9G 101M 1.2G 9.6M 636M 1.7G
Swap: 1.5G 0B 1.5G
永久挂载
vim /etc/rc.local
swapon /tmp/500m \\添加开机自动挂载
vim /etc/fstab 添加
五、文件系统:
装修风格---决定房屋怎么住人
文件系统: 文件在磁盘中如何存放 存放规则
硬盘 ---->分区-------->格式化 创建文件系统----->挂载
划分隔断 装修 安装门窗
1.常见的文件系统:
CentOS 7 默认的文件系统xfs
CentOS 6 默认的文件系统ext4
CentOS 5 默认的文件系统ext3
交换分区 swap
内存文件系统 tmpfs 存放的数据是在内存中 用于加速或存放缓存
SUSE reiserFS
2.应用场景
Linux 文件与目录管理命令~超详细
reiserfs 大量小文件业务首选reiserfs(100K以内), 单独安装。
xfs 有的门户的数据库MySQL业务会选择xfs。
ext4 视频下载,流媒体,数据库,小文件业务也OK,可以用默认的。
ext2 没有日志(不是messages cron secure),蓝汛、网宿的cache业务,CDN 网站加速服务的。
swap 交换分区 内存不足临时充当内存
tmpfs 用于加速或存放缓存
3.CDN是啥?Content Delivery Network 内容分发网络
目的:
使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
基本原理:
是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,
在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,
由缓存服务器直接响应用户请求。
作业:
网络面试题:https://www.jianshu.com/p/fd8fd997760f
osi7层模型
三次握手 四次挥手
添加静态路由
wireshark 抓包tcodump(了解)
掩码计算 子网划分
未完待续.....
·