SUSE常见问题解决办法
#磁盘相关
磁盘空间不足
/空间不足
SUSE用了一段时间,确实是十分人性化而且提示清晰的一款操作系统,让用惯了win/ubuntu的我,也没有什么太大的不适应,先赞一个。 今天从休眠模式解锁时看到一个提示,/空间可能不足,不明白,/有10G左右的空间,平时的操作也完全不放到/下,那么为什么空间会用掉呢?是不是误报?
1. 首先,检查一下磁盘空间,df -h
binresist@binresist:/> df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 71M 7.7G 1% /dev/shm
tmpfs 7.7G 2.5M 7.7G 1% /run
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/sda2 10G 9.1G 707M 93% /
/dev/sda2 10G 9.1G 707M 93% /.snapshots
/dev/sda8 16G 76M 15G 1% /usr/local
/dev/sda3 10G 687M 9.4G 7% /var
/dev/sda2 10G 9.1G 707M 93% /srv
/dev/sda7 30G 17M 30G 1% /tmp
/dev/sda6 30G 17M 30G 1% /opt
/dev/sda1 1.8G 227M 1.5G 14% /boot
/dev/sdb1 932G 103G 828G 12% /home
tmpfs 1.6G 24K 1.6G 1% /run/user/1000
2. 看起来,磁盘空间果然所剩无几,有一点需要注意的是,/.snapshots /srv和/挂载的是同一个分区,共用10G的存储。
3. /srv和/.snapshots,还是其他的磁盘空间占用过多?sudo du -h --max-depth=1 /
28M /etc
83G /.snapshots
516K /srv
225M /boot
98G /home
0 /opt
68K /tmp
5.9G /usr
653M /var
208K /dev
0 /proc
0 /sys
2.3M /run
549M /lib
11M /sbin
5.2M /bin
19M /lib64
0 /mnt
4.6M /root
0 /selinux
4. 可以看到,/srv只有500多k,/.snapshots却已经超过了总大小。这是为什么?实际的文件大小为什么会超过磁盘总空间?这不可能啊!检查一下!
cd /.snapshots
ls -l
总用量 4
drwxr-xr-x 1 root root 32 3月 30 06:26 1
drwxr-xr-x 1 root root 32 3月 30 06:40 2
drwxr-xr-x 1 root root 32 4月 5 09:55 77
drwxr-xr-x 1 root root 62 4月 5 09:55 78
drwxr-xr-x 1 root root 32 4月 6 09:32 79
drwxr-xr-x 1 root root 62 4月 6 09:44 80
drwxr-xr-x 1 root root 32 4月 10 10:00 81
drwxr-xr-x 1 root root 62 4月 10 10:00 82
drwxr-xr-x 1 root root 32 5月 5 15:23 83
drwxr-xr-x 1 root root 62 5月 5 15:23 84
drwxr-xr-x 1 root root 32 5月 8 09:31 85
drwxr-xr-x 1 root root 62 5月 8 09:31 86
drwxr-xr-x 1 root root 32 5月 9 15:09 87
drwxr-xr-x 1 root root 62 5月 9 15:09 88
-rw-r----- 1 root root 184 5月 9 15:09 grub-snapshot.cfg
4.1 随便找一个文件夹进去看一下:cd 1
ls -l
可以看到里面依然是snapshots
binresist:/.snapshots/1 # ls -l
总用量 4
-rw------- 1 root root 168 3月 30 06:26 info.xml
drwxr-xr-x 1 root root 156 3月 30 06:26 snapshot
4.2 继续深入:cd snapshots
ls -l
binresist:/.snapshots/1/snapshot # ls -l
总用量 0
drwxr-xr-x 1 root root 1760 5月 5 15:18 bin
drwxr-xr-x 1 root root 0 3月 30 06:26 boot
drwxr-xr-x 1 root root 0 3月 30 06:26 dev
drwxr-xr-x 1 root root 5274 5月 11 10:08 etc
drwxr-xr-x 1 root root 0 3月 30 06:26 home
drwxr-xr-x 1 root root 2546 4月 5 09:53 lib
drwxr-xr-x 1 root root 5178 5月 5 15:18 lib64
drwxr-xr-x 1 root root 6 3月 30 11:25 mnt
drwxr-xr-x 1 root root 0 3月 30 06:26 opt
drwxr-xr-x 1 root root 0 3月 30 06:26 proc
drwx------ 1 root root 382 5月 12 10:09 root
drwxr-xr-x 1 root root 0 3月 30 06:26 run
drwxr-xr-x 1 root root 4686 5月 5 15:22 sbin
drwxr-xr-x 1 root root 0 10月 7 2016 selinux
drwxr-xr-x 1 root root 0 5月 11 10:08 .snapshots
drwxr-xr-x 1 root root 0 3月 30 06:26 srv
drwxr-xr-x 1 root root 0 3月 30 06:26 sys
drwxr-xr-x 1 root root 0 3月 30 06:26 tmp
drwxr-xr-x 1 root root 130 3月 30 06:26 usr
drwxr-xr-x 1 root root 0 3月 30 06:26 var
4.3 继续深入cd bin
ls -l
binresist:/.snapshots/1/snapshot/bin # ls -l
总用量 5280
lrwxrwxrwx 1 root root 13 3月 30 06:28 arch -> /usr/bin/arch
lrwxrwxrwx 1 root root 21 3月 30 06:28 awk -> /etc/alternatives/awk
lrwxrwxrwx 1 root root 17 3月 30 06:28 basename -> /usr/bin/basename
-rwxr-xr-x 1 root root 697816 10月 18 2016 bash
lrwxrwxrwx 1 root root 12 3月 30 06:28 cat -> /usr/bin/cat
lrwxrwxrwx 1 root root 14 3月 30 06:28 chgrp -> /usr/bin/chgrp
lrwxrwxrwx 1 root root 14 3月 30 06:28 chmod -> /usr/bin/chmod
lrwxrwxrwx 1 root root 14 3月 30 06:28 chown -> /usr/bin/chown
lrwxrwxrwx 1 root root 13 3月 30 06:28 chvt -> /usr/bin/chvt
lrwxrwxrwx 1 root root 18 3月 30 06:28 clrunimap -> /usr/bin/clrunimap
lrwxrwxrwx 1 root root 11 3月 30 06:28 cp -> /usr/bin/cp
lrwxrwxrwx 1 root root 13 5月 5 15:18 cpio -> /usr/bin/cpio
lrwxrwxrwx 1 root root 4 3月 30 06:28 csh -> tcsh
lrwxrwxrwx 1 root root 13 3月 30 06:28 date -> /usr/bin/date
-rwxr-xr-x 1 root root 10640 3月 15 19:13 dbus-cleanup-sockets
-rwxr-xr-x 1 root root 426616 3月 15 19:13 dbus-daemon
-rwxr-xr-x 1 root root 18944 3月 15 19:13 dbus-monitor
-rwxr-xr-x 1 root root 23176 3月 15 19:13 dbus-send
-rwxr-xr-x 1 root root 10560 3月 15 19:13 dbus-uuidgen
lrwxrwxrwx 1 root root 11 3月 30 06:28 dd -> /usr/bin/dd
lrwxrwxrwx 1 root root 18 3月 30 06:28 deallocvt -> /usr/bin/deallocvt
lrwxrwxrwx 1 root root 11 3月 30 06:28 df -> /usr/bin/df
lrwxrwxrwx 1 root root 14 3月 30 06:29 dmesg -> /usr/bin/dmesg
可以看到,显然,这是因为软链接的指向,使du对空间进行了重复计算。打开其他的2, 77等,也是这样。
5. snapshots是什么?
回归到问题本质,那么,这个.snapshots是什么呢?现象上,可以看到,每个snapshots中实际上是/下一些命令的软链接。那么,这种软链接有什么作用呢?是为了某些程序的调用方便?还是为了备份或者其他目的?
6. snapper/btrfs
经过网上资料的搜索和总结,发现这实际上是因为该分区采用了一种btrfs的文件系统,这种文件系统采用B-Tree来管理元数据,而不是向ext2/ext3那样采用线形表,对于文件数量较多时,能够有更好的查找、插入、删除性能。使用snapper则可以对使用btrfs的文件系统进行快照的管理。而在suse上,默认情况下,snapper服务于yast和zypper所作的修改,便于回滚。
注:关于btrfs和snapper,这里有几篇简单的概述性说明。 btrfs百度百科 snapper 使用df -Th
来查看分区类型。
binresist@binresist:~/文档/notes/md> df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs tmpfs 7.7G 179M 7.6G 3% /dev/shm
tmpfs tmpfs 7.7G 2.6M 7.7G 1% /run
tmpfs tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/sda2 btrfs 10G 9.1G 707M 93% /
/dev/sda2 btrfs 10G 9.1G 707M 93% /.snapshots
/dev/sda8 xfs 16G 76M 15G 1% /usr/local
/dev/sda3 xfs 10G 689M 9.4G 7% /var
/dev/sda2 btrfs 10G 9.1G 707M 93% /srv
/dev/sda7 btrfs 30G 17M 30G 1% /tmp
/dev/sda6 btrfs 30G 17M 30G 1% /opt
/dev/sda1 ext4 1.8G 227M 1.5G 14% /boot
/dev/sdb1 btrfs 932G 105G 827G 12% /home
tmpfs tmpfs 1.6G 56K 1.6G 1% /run/user/1000
tmpfs tmpfs 1.6G 20K 1.6G 1% /run/user/479
7. snapper用法
知道了这些,那么只需要知道snapper的用法,修改快照的频率,或者修改快照的位置即可。毕竟/home还有很大的空间。 sudo snapper --help
输出结果很多,这里就不再列出了,
8. 查看当前有多少个快照
sudo snapper list
binresist@binresist:~/文档/notes/md> sudo snapper list
类型 | # | 前期 # | 日期 | 用户 | 清空 | 描述 | 用户数据
-------+----+----------+---------------------------------------------+--------+--------+-----------------------+--------------
single | 0 | | | root | | current |
single | 1 | | 2017年03月30日 星期四 06时26分27秒 | root | | first root filesystem |
single | 2 | | 2017年03月30日 星期四 06时40分54秒 | root | number | after installation | important=yes
pre | 77 | | 2017年04月05日 星期三 09时52分16秒 | root | number | zypp(packagekitd) | important=yes
post | 78 | 77 | 2017年04月05日 星期三 09时55分12秒 | root | number | | important=yes
pre | 79 | | 2017年04月06日 星期四 09时32分24秒 | root | number | yast sw_single |
post | 80 | 79 | 2017年04月06日 星期四 09时44分20秒 | root | number | |
pre | 81 | | 2017年04月10日 星期一 10时00分26秒 | root | number | zypp(packagekitd) | important=no
post | 82 | 81 | 2017年04月10日 星期一 10时00分31秒 | root | number | | important=no
pre | 83 | | 2017年05月05日 星期五 15时18分18秒 | root | number | zypp(packagekitd) | important=yes
post | 84 | 83 | 2017年05月05日 星期五 15时23分33秒 | root | number | | important=yes
pre | 85 | | 2017年05月08日 星期一 09时31分34秒 | root | number | zypp(packagekitd) | important=no
post | 86 | 85 | 2017年05月08日 星期一 09时31分44秒 | root | number | | important=no
pre | 87 | | 2017年05月09日 星期二 15时09分32秒 | root | number | zypp(packagekitd) | important=no
post | 88 | 87 | 2017年05月09日 星期二 15时09分40秒 | root | number | | important=no
9. 删除快照恢复空间
sudo snapper delete n
binresist@binresist:~/Blog/binresist.github.io/_posts/software_error> sudo snapper list
root's password:
类型 | # | 前期 # | 日期 | 用户 | 清空 | 描述 | 用户数据
-------+---+----------+---------------------------------------------+--------+--------+-----------------------+-------------
single | 0 | | | root | | current |
single | 1 | | 2017年03月30日 星期四 06时26分27秒 | root | | first root filesystem |
注:n指代的是序号
10. 修改配置文件,减少个人操作
vim /etc/snapper/configs/root
注:这里的配置文件名叫root,请根据个人实际情况来调整。