搞算法的小可爱竟把服务器的根目录吃满了,被迫复习Linux存储命令
为什么服务器的根目录能满了,一般来说大家的数据都保存在/data/username
下。经过一顿排查请教管理员,发现是一些小可爱把东西放在/home/username
。
醉了!
根目录存储空间竟然满了!
早上怀着不安滴心情来看实验结果,结果发现 vscode 连接远程服务器时,无限循环输入平台、密码(在 vscode 的 output 中发现故障1),网上找了一些办法也都没什么用,ssh 到服务器上摆弄了一番,注意到命令补全时,出现故障2。
# 故障1:
[10:33:34.322] [server] Error installing server: error creating temp download dir: No space left on device (os error 28) at path "/tmp/.tmph6RcqW”
# 故障2:
$ ls .-bash: cannot create temp file for here-document: No space left on device
第一反应是,是不是我微调的 llama 保存的 lora ckp 太多了,每个可能3-5G,把磁盘吃满了。就摸索着查查大文件,还有就是如何确定用户可用空间大小?
先查看自己占用的磁盘空间:
$ du -sh ~/*
2.6G /data/xxxxx/AgentRecs
86G /data/xxxxx/anaconda3
13G /data/xxxxx/Expel_all
297M /data/xxxxx/java11
123G /data/xxxxx/llm4rec-s
4.0K /data/xxxxx/LLM-Enhanced-SR
452K /data/xxxxx/MoE-LoRA
52M /data/xxxxx/MOELoRA-peft
0 /data/xxxxx/perl5
13G /data/xxxxx/text-generation-webui
18M /data/xxxxx/tools
92K /data/xxxxx/useLLM
du -sh ~/*
显示主目录下每个子目录和文件的磁盘使用情况。
-
du
:磁盘使用情况(disk usage),用于查看文件和目录所占用的磁盘空间。 -
s
:汇总(summarize),表示只显示每个目录的总大小,而不显示子目录的详细信息。 -
h
:人类可读(human-readable),以易读的格式显示大小(例如,K、M、G 等)。 -
~/*
:表示用户主目录下的所有文件和子目录。~
是当前用户的主目录,/*
通配符表示主目录下的所有内容。 -
du
命令可以使用--max-depth
选项来指定目录层次的深度。eg:du -h --max-depth=1 ~/ # 显示主目录下所有内容的大小,仅限于一层深度 du -h --max-depth=2 ~/ # 显示主目录下两层深度的目录和文件大小
显示文件系统的磁盘空间使用情况:
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 126G 0 126G 0% /dev
tmpfs 126G 140K 126G 1% /dev/shm
tmpfs 126G 495M 126G 1% /run
tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/sda4 7.3T 7.3T 20K 100% /
/dev/sdb1 7.3T 5.1T 2.3T 69% /data
/dev/sda2 1014M 393M 622M 39% /boot
/dev/sda1 1022M 12M 1011M 2% /boot/efi
10.208.58.25:/data 5.5T 2.0T 3.3T 38% /data25-new
172.22.1.22:/data 73T 24T 45T 35% /data22
10.208.61.133:/data 5.5T 1.6T 3.7T 30% /data133
10.208.62.15:/data 6.5T 3.6T 2.7T 58% /data15
10.61.1.25:/data 7.3T 5.1T 2.3T 69% /data25
tmpfs 26G 12K 26G 1% /run/user/42
tmpfs 26G 0 26G 0% /run/user/1029
tmpfs 26G 0 26G 0% /run/user/1019
分析一波,之前从没看懂过:
/dev/sda4 7.3T 7.3T 20K 100% /
/dev/sdb1 7.3T 5.1T 2.3T 69% /data
- 根目录的磁盘使用达到100%,这就是前面故障的原因。
/dev/sdb1
挂载在/data
下,那么/
根目录的磁盘空间大小不会包括/data
目录的空间使用情况。即/
根目录只会统计其自身和直接挂载的内容的磁盘使用情况。
下面这些又是什么?看起来最后的数字很像用户的UID。
tmpfs 26G 0 26G 0% /run/user/1029
tmpfs 26G 0 26G 0% /run/user/1019
tmpfs 26G 0 26G 0% /run/user/1033
-
tmpfs
是一种基于内存的临时文件系统,通常用于存储短期存在的数据。tmpfs
的数据存储在内存中,这使得它比传统的磁盘存储要快得多。它在系统重启时会丢失所有数据,因为它不持久化数据到磁盘。 -
/run/user/1029
:是为用户ID为1029的用户创建的一个运行时目录。这个目录通常用于存储与该用户会话相关的临时文件,例如锁文件、套接字文件等。每个登录的用户都会在/run/user
目录下拥有一个对应的子目录,名称为其用户ID。为什么使用
tmpfs
?- 速度: 因为
tmpfs
数据存储在内存中,所以读写速度非常快。 - 临时性:
tmpfs
适合用于存储不需要持久化的数据,比如会话数据、缓存、临时文件等。 - 自动清理: 在系统重启时,
tmpfs
文件系统会自动清空,这有助于避免临时文件堆积。
- 速度: 因为
-
通常情况下,
tmpfs
文件系统在用户登录时才会挂载。用户退出登陆时
如何确定用户可用空间大小?
quota -u $USER
输出为空;可能是没有启用磁盘配额。问了管理员确实没有。
总结(存储空间命令)
du -sh ~/*
du -h --max-depth=1 ~/ # 显示主目录下所有内容的大小,仅限于一层深度
du -h --max-depth=2 ~/ # 显示主目录下两层深度的目录和文件大小
df -h
另外,lsblk
列出块设备(block devices)的信息:
$ lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 7.3T 0 disk
|-sda1 8:1 0 1G 0 part /boot/efi
|-sda2 8:2 0 1G 0 part /boot
|-sda3 8:3 0 32G 0 part
`-sda4 8:4 0 7.3T 0 part /
sdb 8:16 0 7.3T 0 disk
`-sdb1 8:17 0 7.3T 0 part /data