第八周-day32-磁盘管理补充-空间不足系列故障

第八周-day32-6.磁盘相关命令和磁盘故障案例.png

磁盘相关命令和磁盘故障案例

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 内容分发网络

CDN概念讲解
目的:
使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

基本原理:
是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,
在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,
由缓存服务器直接响应用户请求。

作业:
网络面试题:https://www.jianshu.com/p/fd8fd997760f
osi7层模型
三次握手 四次挥手
添加静态路由
wireshark 抓包tcodump(了解)
掩码计算 子网划分

未完待续.....

·

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。