搞算法的小可爱竟把服务器的根目录吃满了,被迫复习Linux存储命令

陶应
• 阅读 99

为什么服务器的根目录能满了,一般来说大家的数据都保存在/data/username 下。经过一顿排查请教管理员,发现是一些小可爱把东西放在/home/username

搞算法的小可爱竟把服务器的根目录吃满了,被迫复习Linux存储命令

醉了!

根目录存储空间竟然满了!

早上怀着不安滴心情来看实验结果,结果发现 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
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这