解决服务器根目录存储空间不足的办法
极客 服务器 Linux 21

针对实验室服务器根目录空间不足的问题,以下从永久化配置、批量操作优化、根目录冗余清理、风险规避四个维度补充优化方案,让空间管理更高效、更省心:

一、永久化配置:避免每次手动设置(核心优化)

当前方案中,TMPDIRpip缓存需每次终端会话手动配置,可通过修改终端配置文件实现 “一次配置,永久生效”,减少重复操作。

1. 永久修改 pip 缓存目录

无需每次pip install都加--cache-dir,直接在用户目录下创建 pip 配置文件:

# 1. 创建pip配置目录(若不存在)
mkdir -p ~/.config/pip

# 2. 写入永久缓存路径(替换为你的大空间磁盘路径)
cat > ~/.config/pip/pip.conf << EOF
[global]
cache-dir = /media/lab512-dell/Data2/pip_cache  # 你的pip缓存目录
EOF

# 验证:查看配置是否生效
pip config list
# 预期输出:global.cache-dir='/media/lab512-dell/Data2/pip_cache'

2. 永久修改系统临时目录(TMPDIR)

避免每次终端都export TMPDIR,将配置写入终端默认配置文件(根据终端类型选择,实验室服务器多为bash):

# 1. 编辑bash配置文件(若用zsh,替换为 ~/.zshrc)
nano ~/.bashrc

# 2. 在文件末尾添加以下内容(替换为你的临时目录)
export TMPDIR="/media/lab512-dell/Data2/pip_temp"
# 可选:设置tmp目录自动清理(避免临时文件堆积)
alias clean_tmp="rm -rf $TMPDIR/*"  # 后续执行 clean_tmp 即可清空临时文件

# 3. 保存并生效配置(或重启终端)
source ~/.bashrc

# 验证:查看TMPDIR是否生效
echo $TMPDIR
# 预期输出:/media/lab512-dell/Data2/pip_temp

3. 永久配置 conda 全局默认环境路径

避免每次创建环境都手动写-p /xxx/xxx,通过 conda 配置指定 “默认环境存储目录”,后续用-n也能自动存到目标磁盘:

# 1. 查看当前conda配置
conda config --show-sources

# 2. 添加默认环境路径(替换为你的conda_envs目录)
conda config --add envs_dirs /media/lab512-dell/Data2/xwk/conda_envs

# 3. (可选)添加conda包缓存路径(避免包下载到根目录)
conda config --add pkgs_dirs /media/lab512-dell/Data2/xwk/conda_pkgs

# 验证:查看配置是否生效
conda config --show envs_dirs
# 预期输出:第一个路径为你指定的 /media/lab512-dell/Data2/xwk/conda_envs

# 后续创建环境可简化命令(无需写-p,-n会自动存到指定目录)
conda create -n TDANet python=3.9  # 等价于之前的 -p 路径命令
conda activate TDANet  # 直接用名字激活,无需写全路径!

二、批量操作优化:提升多环境 / 多用户效率

若实验室多人共用服务器,或需创建多个 conda 环境,可通过脚本批量管理目录规范减少混乱。

1. 一键创建 “conda 环境 + pip 缓存 + tmp 目录” 的脚本

创建init_conda_env.sh脚本,一键完成环境初始化(避免重复敲命令):

#!/bin/bash
# 用法:./init_conda_env.sh 环境名  Python版本
# 示例:./init_conda_env.sh TDANet 3.9

# 配置参数(根据你的磁盘路径修改)
BASE_DIR="/media/lab512-dell/Data2/xwk"
CONDA_ENVS_DIR="$BASE_DIR/conda_envs"
PIP_CACHE_DIR="$BASE_DIR/pip_cache"
PIP_TMP_DIR="$BASE_DIR/pip_temp"

# 检查输入参数
if [ $# -ne 2 ]; then
    echo "用法错误!示例:./init_conda_env.sh TDANet 3.9"
    exit 1
fi

ENV_NAME=$1
PYTHON_VER=$2
ENV_PATH="$CONDA_ENVS_DIR/$ENV_NAME"

# 1. 创建必要目录
mkdir -p $CONDA_ENVS_DIR $PIP_CACHE_DIR $PIP_TMP_DIR

# 2. 创建conda环境
echo "正在创建conda环境:$ENV_PATH(Python $PYTHON_VER)"
conda create -p $ENV_PATH python=$PYTHON_VER -y

# 3. 激活环境并配置pip
echo "正在激活环境并配置pip..."
source activate $ENV_PATH
pip config set global.cache-dir $PIP_CACHE_DIR  # 确保pip缓存生效

# 4. 提示使用方法
echo -e "\n环境创建完成!"
echo "激活命令:conda activate $ENV_PATH"
echo "安装依赖:pip install -r requirements.txt(自动使用缓存)"

使用方式:

# 给脚本执行权限
chmod +x init_conda_env.sh

# 一键创建环境(示例:创建TDANet,Python3.9)
./init_conda_env.sh TDANet 3.9

2. 目录规范:避免多环境 / 多用户混乱

建议在大空间磁盘下按 “功能分类” 创建目录,方便管理和清理:

/media/lab512-dell/Data2/xwk/
├─ conda_envs/    # conda环境目录(每个环境一个子目录)
│  ├─ TDANet/
│  ├─ SwinIR/
│  └─ ...
├─ conda_pkgs/    # conda包缓存(全局共享,避免重复下载)
├─ pip_cache/     # pip全局缓存(同上)
├─ pip_temp/      # 系统临时目录(全局共用)
└─ project_data/  # 项目数据目录(如数据集、模型权重,避免放根目录)

三、根目录冗余清理:释放存量空间(关键补充)

即使配置了新路径,根目录可能仍有历史冗余文件(如旧 conda 环境、缓存、日志),需定期清理以彻底解决空间不足。

1. 清理 conda 根目录的旧环境和缓存

conda 默认会在根目录~/.conda/envs~/.conda/pkgs留存旧环境和包缓存,可迁移或删除:

# 1. 查看根目录下的conda环境(可迁移或删除)
ls ~/.conda/envs  # 旧环境列表,如“old_env”
# 迁移到新目录(可选,保留环境)
mv ~/.conda/envs/old_env /media/lab512-dell/Data2/xwk/conda_envs/
# 或直接删除(确认无用后)
rm -rf ~/.conda/envs/old_env

# 2. 清理conda根目录的包缓存(仅保留当前环境依赖)
conda clean -a -y  # -a 清理所有未使用的包和缓存,-y 自动确认
# 预期释放空间:几十到几百MB(视历史下载量而定)

2. 清理根目录其他冗余(谨慎操作!)

根目录常见占用空间的路径,清理前需确认文件无用:

# 1. 查看根目录各路径占用情况(先定位大文件)
du -h --max-depth=1 /home/lab512-dell/ | sort -rh  # 查看用户目录下的大目录

# 2. 清理用户目录下的冗余(示例)
rm -rf ~/.cache/*  # 清理用户缓存(如浏览器缓存、旧pip缓存,非当前配置的缓存)
rm -rf ~/.local/share/Trash/*  # 清理回收站(避免误删文件堆积)
rm -rf ~/*.log  # 清理用户目录下的日志文件(如训练日志,确认无用后)

# 3. (需sudo权限)清理系统级日志(若根目录 /var 占用大)
sudo rm -rf /var/log/*.log.1  # 删除旧日志(保留最新的 .log 文件)
sudo rm -rf /var/cache/apt/archives/*.deb  # 清理apt包管理器缓存(Ubuntu系统)

四、风险规避:避免操作失误导致数据丢失

1. 给重要目录加 “防误删保护”

通过chattr命令给conda_envspip_cache等核心目录添加 “不可删除” 属性,避免误执行rm -rf导致环境丢失:

# 给conda环境目录加保护(仅允许修改,不允许删除目录本身)
sudo chattr +i /media/lab512-dell/Data2/xwk/conda_envs
# 取消保护(如需删除目录时):sudo chattr -i /xxx/conda_envs

2. 定期备份关键配置

将 conda、pip 的配置文件备份到安全路径,避免系统重装后重新配置:

# 创建配置备份目录
mkdir -p /media/lab512-dell/Data2/backup/config

# 备份conda配置
cp ~/.condarc /media/lab512-dell/Data2/backup/config/

# 备份pip配置
cp ~/.config/pip/pip.conf /media/lab512-dell/Data2/backup/config/

# 备份bash配置(含TMPDIR设置)
cp ~/.bashrc /media/lab512-dell/Data2/backup/config/

3. 监控磁盘空间:提前预警

定期查看磁盘占用,避免大空间磁盘也被占满(可写个简单脚本定时提醒):

# 创建监控脚本:check_disk.sh
cat > ~/check_disk.sh << EOF
#!/bin/bash
# 监控大空间磁盘的占用情况(替换为你的磁盘路径)
DISK_PATH="/media/lab512-dell/Data2"
# 获取磁盘使用率(%)
USAGE=\$(df -h $DISK_PATH | grep -v Filesystem | awk '{print \$5}' | sed 's/%//g')

# 若使用率超过80%,输出警告
if [ \$USAGE -ge 80 ]; then
    echo -e "\033[31m警告!$DISK_PATH 磁盘使用率已达 \$USAGE%,请清理空间!\033[0m"
else
    echo "$DISK_PATH 磁盘使用率:\$USAGE%,空间充足"
fi
EOF

# 给脚本执行权限
chmod +x ~/check_disk.sh

# 后续可添加到定时任务(每天提醒一次)
crontab -e
# 在打开的文件中添加:
0 9 * * * ~/check_disk.sh  # 每天早上9点执行监控

五、简化版


实验室服务器,由于根目录空间不足,导致虽然其它磁盘空间剩余很多,但是无法继续使用的问题
由于服务器的miniconda默认安装在根目录下(相当于C盘),在我们创建环境时,下载的包也会默认存储在根目录下,
我们可以使用如下命令来改变创建环境的存储位置:
```shell
conda create -p /media/lab512-dell/Data2/xwk/conda_envs/TDANet python=3.9
```
conda_envs/TDANet 就是自己指定的存储目录
![alt text](image.png)


使用如下命令激活环境:
```shell
conda activate /media/lab512-dell/Data2/xwk/conda_envs/TDANet
```

临时更改系统的tmp缓存路径:
```shell
mkdir -p /media/lab512-dell/Data2/pip_temp

# 2. 临时设置 TMPDIR 到自定义临时目录
export TMPDIR=/media/lab512-dell/Data2/pip_temp
```

pip安装包时指定自定义的缓存路径:
```shell
mkdir -p /media/lab512-dell/Data2/pip_cache
pip install --cache-dir /media/lab512-dell/Data2/pip_cache -r requirements.txt
```

解决服务器根目录存储空间不足的办法
https://www.bytecanvas.top/archives/k07EEMgs
作者
禧语许
发布于
更新于
许可