Loading

搞算法的小可爱竟把服务器的根目录吃满了,被迫复习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

    1. 速度: 因为 tmpfs 数据存储在内存中,所以读写速度非常快。
    2. 临时性: tmpfs 适合用于存储不需要持久化的数据,比如会话数据、缓存、临时文件等。
    3. 自动清理: 在系统重启时,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
posted @ 2024-06-26 13:33  鲸波行者、苇一航  阅读(63)  评论(0编辑  收藏  举报