今天打开linux虚拟机,执行命令报:
-bash: cannot create temp file for here-document: No space left on device
从错误信息看应该是磁盘空间不够用了,使用df命令确认下:
tianlang@tianlang-VirtualBox:/var/lib/mlocate$ df -lh
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 395M 5.9M 389M 2% /run
/dev/sda1 165G 165G 0 100% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
cargo_registry 476G 89G 388G 19% /home/tianlang/.cargo/registry
code 311G 56G 256G 18% /data/code
tmpfs 395M 0 395M 0% /run/user/1000
从执行结果看主目录(/)的确是没空间了。
具体是什么把空间站满了呢?使用du命令查看下:
tianlang@tianlang-VirtualBox:/var/lib/mlocate$ sudo du -lh --max-depth=1 --exclude=/home/tianlang/.cargo/registry --exclude=/data/code /
13M /etc
16K /lost+found
4.0K /cdrom
556M /lib
2.7G /data
3.4G /usr
19M /opt
998M /home
82M /boot
4.0K /mnt
16M /bin
8.0K /media
4.0K /lib64
16M /sbin
0 /dev
4.0K /srv
36K /tmp
du: cannot access '/run/user/110/gvfs': Permission denied
1012K /run
20K /root
141G /var
其中--max-depth=1指定只统计一级目录的大小,--exclude指定不需要统计大小的目录.
从结果可以看是/var目录过大,再使用du命令统计/var目录下的一级目录的大小,就这样一级一级的查找,最后找到:
tianlang@tianlang-VirtualBox:/var/lib/mlocate$ pwd
/var/lib/mlocate
在这个目录下包含一些查找文件需要用到的索引文件,主要是在执行locale命令时加快查找的速度。
之所以突然变这么大是因为在虚拟机里使用了共享目录挂载了俩个数据机的目录。一个是放代码的/data/code,
一个是Cargo的仓库/home/tianlang/.cargo/registry.都是包含小文件比较多.这就造成了生成的索引文件比较大.
怎么避免对这俩个目录生成索引文件呢?
可以修改/etc/updatedb.conf文件,把这俩个目录放到PRUNEPATHS配置项里
tianlang@tianlang-VirtualBox:/var/lib/mlocate$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /home/tianlang/.cargo/registry /data/code /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs devtmpfs fuse.mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ceph fuse.ceph fuse.rozofs ecryptfs fusesmb"
但这个时候,由于磁盘已经没有空间了,再修改这个文件往这个文件里加东西可就加不进去了.那怎么办呢?如果电脑上有些日志文件可以删除的可以删了先腾点地。我找了半天也没有。才想起把/var/lib/mlocate下面的文件先删除了点,毕竟这些索引文件眼巴前也用不到,用到的时候执行下updatedb再重建就是了.
修改好/etc/updatedb.conf再执行updatedb,重新生成的索引文件就小多了:
tianlang@tianlang-VirtualBox:/var/lib/mlocate$ sudo updatedb
tianlang@tianlang-VirtualBox:/var/lib/mlocate$ ll
total 6056
drwxr-xr-x 2 root root 4096 12月 17 18:03 ./
drwxr-xr-x 59 root root 4096 12月 9 18:16 ../
-rw-r----- 1 root mlocate 6189901 12月 17 18:03 mlocate.db