配额,sudo用户

 #!/bin/bash

# === 配置 ===
DISK_FILE="/home/zhangshuo2024/zhangSHUO.disk" # 文件系统位置
MOUNT_DIR="/mnt/working" # 挂载位置
USER_NAME="zhangshuo2024" # 用户名
DISK_SIZE_MB=51200  # 大小:50GB。可改成102400表示100GB
echo "🔧 开始为用户 $USER_NAME 配置私有磁盘空间..."

# 1. 创建虚拟磁盘文件
if [ -f "$DISK_FILE" ]; then
     echo "⚠️ 文件 $DISK_FILE 已存在,跳过创建"
else
     echo "📦 创建磁盘文件 $DISK_FILE..."
     sudo dd if=/dev/zero of="$DISK_FILE" bs=1M count=$DISK_SIZE_MB status=progress
fi

# 2. 格式化为 ext4 文件系统
echo "🧱 格式化为 ext4..."
sudo mkfs.ext4 "$DISK_FILE"

# 3. 创建挂载目录并挂载
echo "📁 挂载到 $MOUNT_DIR..."
sudo mkdir -p "$MOUNT_DIR"
sudo mount -o loop "$DISK_FILE" "$MOUNT_DIR"
sudo mkdir -p tmp
# 4. 设置权限为当前用户独享
echo "🔒 设置权限..."
sudo chown "$USER_NAME:$USER_NAME" "$MOUNT_DIR"
sudo chmod 700 "$MOUNT_DIR"

# 5. 配置 fstab 实现开机自动挂载
echo "📝 写入 /etc/fstab..."
sudo cp /etc/fstab /etc/fstab.bak.$(date +%F-%T)
if ! grep -q "/mnt/working" /etc/fstab; then
   echo "$DISK_FILE $MOUNT_DIR ext4 loop,noatime 0 2" | sudo tee -a /etc/fstab
fi

echo -e "\n✅ 已成功配置!你现在可以使用以下路径:"
echo "📂 专属目录:$MOUNT_DIR"
echo "📦 磁盘文件:$DISK_FILE"
echo "🚀 推荐训练中使用 TMPDIR=/mnt/working/tmp"

个人用户

mkdir tmp
dd if=/dev/zero of=file bs=1G count=45 status=progress

环境变量

# === 设置临时目录 ===
export WORKINGDIR=/mnt/weisir
export TMPDIR=$WORKINGDIR/tmp

# === 设置统一缓存目录 ===
export XDG_CACHE_HOME=$WORKINGDIR/.cache
export XDG_DATA_HOME=$WORKINGDIR/.local/share

# PyTorch 的 C++ 扩展编译缓存
export TORCH_EXTENSIONS_DIR=$XDG_CACHE_HOME/torch_extensions

# Huggingface 模型缓存
export TRANSFORMERS_CACHE=$XDG_CACHE_HOME/huggingface
export HF_HOME=$XDG_CACHE_HOME/huggingface

# Datasets 缓存
export HF_DATASETS_CACHE=$XDG_CACHE_HOME/huggingface/datasets

链接

mv ~/.cache /mnt/$USER
mv ~/.local /mnt/$USER
mv ~/.vscode-server /mnt/$USER
mv ~/.config /mnt/$USER
ln -s /mnt/$USER/.cache ~/.cache
ln -s /mnt/$USER/.local ~/.local
ln -s /mnt/$USER/.vscode-server ~/.vscode-server
ln -s /mnt/$USER/.config ~/.config

扩容

# Step 0: 确保没有挂载
sudo umount -l /mnt/working

# Step 1: 扩展磁盘文件到10G
truncate -s 10G /home/zhangSHUO/zhangSHUO.disk

# Step 2: 文件系统检查
e2fsck -f /home/zhangSHUO/zhangSHUO.disk

# Step 3: 扩展 ext4 文件系统
resize2fs /home/zhangSHUO/zhangSHUO.disk

# Step 4: 重新挂载
sudo mount -o loop /home/zhangSHUO/zhangSHUO.disk /mnt/working
sudo chown zhangSHUO:zhangSHUO /mnt/working
sudo chmod 700 /mnt/working
#!/bin/bash
# 高级解决方案:使用losetup手动管理loop设备

echo "=== 高级解决方案 ==="

# 步骤1:卸载并清理
sudo umount -l /mnt/working 2>/dev/null || true

# 步骤2:查找并分离loop设备
echo "查找相关的loop设备:"
sudo losetup -a | grep zhangSHUO.disk

# 如果有loop设备,手动分离
LOOP_DEVICE=$(sudo losetup -a | grep zhangSHUO.disk | cut -d: -f1)
if [ ! -z "$LOOP_DEVICE" ]; then
    echo "分离loop设备: $LOOP_DEVICE"
    sudo losetup -d $LOOP_DEVICE
fi

# 步骤3:扩展文件
echo "扩展磁盘文件..."
sudo truncate -s 10G /home/zhangSHUO/zhangSHUO.disk

# 步骤4:创建新的loop设备
echo "创建新的loop设备..."
LOOP_DEVICE=$(sudo losetup -f --show /home/zhangSHUO/zhangSHUO.disk)
echo "使用loop设备: $LOOP_DEVICE"

# 步骤5:检查和扩展文件系统
echo "检查文件系统..."
sudo e2fsck -f -y $LOOP_DEVICE

echo "扩展文件系统..."
sudo resize2fs $LOOP_DEVICE

# 步骤6:挂载
echo "挂载文件系统..."
sudo mount $LOOP_DEVICE /mnt/working

# 步骤7:设置权限
sudo chown zhangSHUO:zhangSHUO /mnt/working
sudo chmod 700 /mnt/working

# 步骤8:验证
echo "=== 最终验证 ==="
df -h /mnt/working
sudo ls -la /mnt/working