创建1个 100k磁盘
第一个里程碑-创建100k点文件
[root@handsome-man ~]# dd if=/dev/zero of=/tmp/100k bs=1k count=100
dd: 打开"/tmp/100k" 失败: 是一个目录
[root@handsome-man ~]# ls -l /tmp/100k
总用量 0
[root@handsome-man ~]# rm -rf /tmp/100k
[root@handsome-man ~]# dd if=/dev/zero of=/tmp/100k bs=1k count=100
记录了100+0 的读入
记录了100+0 的写出
102400字节(102 kB)已复制,0.000689225 秒,149 MB/秒
[root@handsome-man ~]# ll -h /tmp/100k
-rw-r--r-- 1 root root 100K 5月 13 15:59 /tmp/100k
[root@handsome-man ~]# #第二个里程碑-格式化
[root@handsome-man ~]# file /tmp/100k
/tmp/100k: data
[root@handsome-man ~]# mkfs.ext4 /tmp/100k
mke2fs 1.42.9 (28-Dec-2013)
/tmp/100k is not a block special device.
无论如何也要继续? (y,n) y
文件系统小得无法记录日志
Discarding device blocks: 完成
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
16 inodes, 100 blocks
5 blocks (5.00%) reserved for the super user
第一个数据块=1
1 block group
8192 blocks per group, 8192 fragments per group
16 inodes per group
Allocating group tables: 完成
正在写入inode表: 完成
Writing superblocks and filesystem accounting information: 完成
[root@handsome-man ~]# /tmp/100k is not a block special device./tmp/100k is not a block special device.
-bash: /tmp/100k: 权限不够
[root@handsome-man ~]# file /tmp/100k
/tmp/100k: Linux rev 1.0 ext2 filesystem data, UUID=5064e05e-c074-41dc-a88d-ee1c1cc449d5 (extents) (64bit) (huge files)
[root@handsome-man ~]# #第3个里程碑-挂载
[root@handsome-man ~]# mkdir -p /app/log
[root@handsome-man ~]# mount /tmp/100k /app/log/
[root@handsome-man ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 19G 2.5G 17G 13% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 197M 133M 64M 68% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
[root@handsome-man ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 19G 2.5G 17G 13% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 197M 133M 64M 68% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
模拟inode满了
[root@handsome-man /app/log]# cd /app/log/
[root@handsome-man /app/log]# touch oldboy{01..10}.txt
touch: 无法创建"oldboy06.txt": 设备上没有空间
touch: 无法创建"oldboy07.txt": 设备上没有空间
touch: 无法创建"oldboy08.txt": 设备上没有空间
touch: 无法创建"oldboy09.txt": 设备上没有空间
touch: 无法创建"oldboy10.txt": 设备上没有空间
[root@handsome-man /app/log]# ls -l oldboy
ls: 无法访问oldboy: 没有那个文件或目录
[root@handsome-man /app/log]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 19G 2.5G 17G 13% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 197M 133M 64M 68% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
Linux下面删除大量小文件(文件) Argument list too long解决流程
[root@oldboyedu59 ~]# mkdir test
[root@oldboyedu59 ~]# touch test/{1..400000}
-bash: /usr/bin/touch: Argument list too long
[root@oldboyedu59 ~]# ls test/
[root@oldboyedu59 ~]# echo test/{1..400000}|xargs touch
##报错
[root@oldboyedu59 ~]# ls test/|wc -l
400000
[root@oldboyedu59 ~]# \rm test/*
-bash: /usr/bin/rm: Argument list too long
##解决
ls或find +|xargs rm -f
Linux文件删除原理:
Linux彻底删除1个文件的条件:
1.没有入口(rm 硬链接数为0) oldboy.txt /etc/hosts
2.没有人使用这个文件(进程调用数 为0) 重启这个服务
yum install lsof -y
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
模拟文件没有被彻底删除导致磁盘空间不足
seq 500000000 >>/var/log/messages
df -h
du -sh /|sort -h
du -sh /var/|sort -h
du -sh /var/log/*|sort -h
ll -h /var/log/messages
df -h
\rm -f /var/log/messages
df -h
ll /var/log/messages
此时完成故障模拟
排错
lsof |grep messages
rsyslog 系统日志服务
ll /var/log/messages /var/log/secure /var/log/cron
lsof |grep messages
df -h
systemctl restart rsyslog.service abrtd.service
lsof的delete标记说明
1个窗口 tail -f alex.txt
另外1个窗口
[root@oldboyedu59 ~]# lsof |grep alex.txt
tail 17302 root 3r REG 8,3 0 134348620 /root/alex.txt
[root@oldboyedu59 ~]# rm -f alex.txt
[root@oldboyedu59 ~]#
[root@oldboyedu59 ~]#
[root@oldboyedu59 ~]# lsof |grep alex.txt
tail 17302 root 3r REG 8,3 0 134348620 /root/alex.txt (deleted)
[root@oldboyedu59 ~]# ls -l alex.txt
ls: cannot access alex.txt: No such file or directory
[root@oldboyedu59 ~]# lsof |grep alex.txt
tail 17302 root 3r REG 8,3 0 134348620 /root/alex.txt (deleted)
No Space left on device 磁盘空间不足 故障系列:
原因 排查过程 解决
1.inode满了 df -h 没有满,df -i 整体哪里满了 找出系统中目录大于1MB的 然后确认之后删除下面的小文件
2.block正常 df -h 满了, du -sh 一层一层 排查 排查到具体的文件或目录时候 确认再删除
3.block(文件没有被彻底删除)df -h 满了, du -sh 没有满 ,lsof |grep delete 重启对应服务
1.inode满了 df -h 没有满,df -i 整体哪里满了 找出系统中目录大于1MB的 然后确认之后删除下面的小文件
[root@oldboyedu59 ~]# ll -hd guoav/
drwxr-xr-x 2 root root 1.2M May 13 11:49 guoav/
目录的block的大小 block里面存放的是文件名
[root@oldboyedu59 ~]# dd if=/dev/zero of=/tmp/500m bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 5.14645 s, 102 MB/s
[root@oldboyedu59 ~]# mkswap /tmp/500m
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=6ba0befd-aeaf-4dd4-88b0-07cab2af6f61
[root@oldboyedu59 ~]# chmod 600 /tmp/500m
[root@oldboyedu59 ~]# swapon /tmp/500m
[root@oldboyedu59 ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 204M 76M 2.3M 1.7G 1.5G
Swap: 1.5G 32M 1.5G
Changes will remain in memory only, until you decide to write them.
你进行的修改默认存放在内存中,直到你决定保存这些修改的时候.
:wq
Be careful before using the write command.
保存之前小心点!
Device does not contain a recognized partition table
设备 没有 包含 磁盘分区表。
Building a new DOS disklabel with disk identifier 0x6df46197.
DPT= disk partition table 磁盘分区表
Invalid partition type `e'
mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (ext4).
这个磁盘分区中 已经包含了1个文件系统(已经格式化过了)
mkfs.xfs: Use the -f option to force overwrite.
如果强制格式化使用-f
[root@cuihua ~]# mount /dev/sdb1 /mnt
mount: /dev/sdb1 is write-protected, mounting read-only
mount: unknown filesystem type '(null)'
未知的文件系统(没有格式化)
5.
[root@guanggege ~]# mount /dev/sdb1 /mnt/
mount: special device /dev/sdb1 does not exist
特殊文件(设备文件) 不存在
6.
[root@oldboyedu59 ~]# mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 contains a mounted filesystem
sdb1磁盘分区 包含 1个已经挂载的文件系统 (磁盘分区已经挂载)
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
<devicename> is required unless -d name=xxx is given.
<num> is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB),
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
<value> is xxx (512 byte blocks).
-
[root@oldboy ~]# mkfs.xfs /dev/sdb1 -f
agsize (2560 blocks) too small, need at least 4096 blocks
磁盘分区太小了 无法格式化
Usage: mkfs.xfs
[root@oldboyedu ~]# mount /dev/sdb1 /mnt/
mount: /dev/sdb1 is already mounted or /mnt busy
磁盘分区 已经 挂载或/mnt正在使用中
/dev/sdb1 is already mounted on /mnt
提示集合:
Argument list too long
参数 列表过长 (命令后面的文件太多了)
[root@oldboyedu59 ~]# mkdir test
[root@oldboyedu59 ~]# touch test/{1..400000}
-bash: /usr/bin/touch: Argument list too long
[root@oldboyedu59 ~]# ls test/
[root@oldboyedu59 ~]# ls test/|wc -l
400000
/tmp/100k is not a block special device.
dd if=/dev/zero of=/tmp/100k bs=1k count=100
[root@oldboyedu59 ~]# file /tmp/100k
/tmp/100k: data
[root@oldboyedu59 ~]# mkfs.ext4 /tmp/100k
mke2fs 1.42.9 (28-Dec-2013)
/tmp/100k is not a block special device.
Proceed anyway? (y,n) y
No space left on device
[root@oldboyedu59 /app/log]# touch oldboy{01..10}.txt
touch: cannot touch ‘oldboy06.txt’: No space left on device
Cannot allocate memory
无法分配内存
[root@oldboy ~]# echo test1/{0..500000000}
-bash: fork: Cannot allocate memory
yum 故障 Resource temporarily unavailable
error: db5 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db5 - Resource temporarily unavailable (11)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
原因 :
yum的数据库缓存没了 重新建立
解决:
rpmdb --rebuilddb
No space left on device
[root@shenfan2hao1 ~]# yum install lsof -y
error: db5 error(28) from dbenv->open: No space left on device
error: cannot open Packages index using db5 - No space left on device (28)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
Error: rpmdb open failed
Device or resource busy
设备正忙
这个文件正在使用中 已经挂载或激活
[root@oldedu59 ~]# ll /tmp/500m
-rw-r--r-- 1 root root 524288000 May 13 12:10 /tmp/500m
[root@oldedu59 ~]# swapon /tmp/500m
swapon: /tmp/500m: insecure permissions 0644, 0600 suggested.
[root@oldedu59 ~]# chmod 600 /tmp/500m
[root@oldedu59 ~]# swapon /tmp/500m
swapon: /tmp/500m: swapon failed: Device or resource busy
[root@oldboyedu59 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 99G 4.2G 95G 5% /
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 105M 93M 54% /boot
/dev/sdb1 98M 5.3M 93M 6% /data
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
[root@oldboyedu59 ~]# mount /tmp/100k /app/log/
mount: /tmp/100k is already mounted
文件系统:
装修风格---决定房屋怎么住人
文件系统: 文件在磁盘中如何存放 存放规则
硬盘 ---->分区-------->格式化 创建文件系统----->挂载
划分隔断 装修 安装门窗
常见的文件系统:
CentOS 7 默认的文件系统xfs
CentOS 6 默认的文件系统ext4
CentOS 5 默认的文件系统ext3
交换分区 swap
内存文件系统 tmpfs 存放的数据是在内存中 用于加速或存放缓存
SUSE reiserFS
应用场景
reiserfs大量小文件业务首选reiserfs(100K以内), 单独安装。
xfs有的门户的数据库MySQL业务会选择xfs。
ext4 视频下载,流媒体,数据库,小文件业务也OK,可以用默认的。
ext2 没有日志(不是messages cron secure),蓝汛、网宿的cache业务,CDN 网站加速服务的。
swap 交换分区 内存不足临时充当内存
tmpfs 用于加速或存放缓存
网友评论