我重新整理了我的家用i3的小主机,在128G的固态上安装了debian的命令行系统,并且配置好了默认的静态ip连接到WiFi。我现在想将里面的两个闲置的500G硬盘作为自己的家用云盘使用,并且用samba开启共享盘。
挂载磁盘
这里是一个挂载磁盘的shell脚本。
#!/bin/bash
# ==============================================================================
# 脚本名称: setup_storage.sh
# 作用: 格式化两块500G硬盘为ext4,并使用MergerFS合并为1TB逻辑存储池
# ==============================================================================
set -e
# 确保以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo "[-] 请使用 root 权限运行此脚本: sudo bash $0"
exit 1
fi
echo "==================== 当前系统磁盘布局 ===================="
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE,MODEL
echo "=========================================================="
echo "请仔细查看上方列表,找到你的两块 500G 机械硬盘名称(例如: sdb 和 sdc)。"
echo "【警告】:切勿填入系统盘(带有 / 挂载点的盘)!"
echo ""
read -p "请输入第一块500G硬盘的名称 (例如 sdb): " DISK1_NAME
read -p "请输入第二块500G硬盘的名称 (例如 sdc): " DISK2_NAME
DISK1="/dev/$DISK1_NAME"
DISK2="/dev/$DISK2_NAME"
if [ ! -b "$DISK1" ] || [ ! -b "$DISK2" ]; then
echo "[-] 错误: 指定的磁盘设备不存在,请核对名称。"
exit 1
fi
echo ""
echo "即将格式化的磁盘: $DISK1 和 $DISK2"
read -p "此操作将抹除这两块盘上的全部数据,确认继续吗?(yes/no): " CONFIRM
if [ "$CONFIRM" != "yes" ]; then
echo "[-] 用户取消操作。"
exit 0
fi
# 1. 安装基础依赖
echo "[+] 正在更新软件源并安装 mergerfs 及格式化工具..."
apt update
apt install -y mergerfs parted e2fsprogs
# 2. 格式化硬盘为 ext4 (单分区,GPT)
format_disk() {
local target_disk=$1
echo "[+] 正在处理磁盘: $target_disk"
# 创建 GPT 分区表
parted -s "$target_disk" mklabel gpt
# 建立主分区占满整个盘
parted -s "$target_disk" mkpart primary ext4 0% 100%
sleep 2
# 格式化分区
mkfs.ext4 -F "${target_disk}1"
}
format_disk "$DISK1"
format_disk "$DISK2"
# 3. 创建挂载点
echo "[+] 创建挂载目录..."
mkdir -p /mnt/disk1
mkdir -p /mnt/disk2
mkdir -p /mnt/storage
# 4. 获取 UUID
UUID1=$(blkid -s UUID -o value "${DISK1}1")
UUID2=$(blkid -s UUID -o value "${DISK2}1")
echo "[+] 磁盘 1 UUID: $UUID1"
echo "[+] 磁盘 2 UUID: $UUID2"
# 5. 配置 /etc/fstab 自动挂载
echo "[+] 备份 /etc/fstab..."
cp /etc/fstab /etc/fstab.bak.$(date +%F_%T)
echo "[+] 写入 /etc/fstab 自动挂载配置..."
# 清理可能存在的旧配置
sed -i '/\/mnt\/disk/d' /etc/fstab
sed -i '/\/mnt\/storage/d' /etc/fstab
cat <<EOF >> /etc/fstab
# --- MergerFS Storage Pool ---
UUID=$UUID1 /mnt/disk1 ext4 defaults,noatime 0 2
UUID=$UUID2 /mnt/disk2 ext4 defaults,noatime 0 2
/mnt/disk1:/mnt/disk2 /mnt/storage fuse.mergerfs defaults,allow_other,use_ino,cache.files=off,category.create=mfs,minfreespace=10G,fsname=mergerfsPool 0 0
EOF
# 说明:
# category.create=mfs (Most Free Space): 写入新文件时,自动选择剩余空间最多的那块盘,实现天然负载均衡。
# minfreespace=10G: 硬盘剩余低于10G时自动转向另一块盘。
# 6. 测试并挂载
echo "[+] 挂载所有磁盘..."
mount -a
echo "[+] 赋予 /mnt/storage 读写权限..."
chmod -R 777 /mnt/storage
systemctl daemon-reload
echo "==================== 存储池配置完成 ===================="
df -h /mnt/disk1 /mnt/disk2 /mnt/storage
echo "=========================================================="
echo "现在 /mnt/storage 已具备约 1TB (500G+500G) 容量!"
将上面的脚本保存到/tmp/setup_storage.sh,然后使用sudo bash /tmp/setup_storage.sh。按脚本提示输入信息即可。
局域网samba共享
这是一个设置samba共享的shell脚本。
#!/bin/bash
# ==============================================================================
# 脚本名称: setup_samba.sh (优化安全版)
# 作用: 部署 Samba 服务并将 /mnt/storage/shared 共享给局域网
# ==============================================================================
set -e
if [ "$EUID" -ne 0 ]; then
echo "[-] 请使用 root 权限运行此脚本: sudo bash $0"
exit 1
fi
SHARE_PATH="/mnt/storage/shared"
# 1. 安全检查:确认存储池挂载
if ! mountpoint -q /mnt/storage; then
echo "[-] 【致命错误】检测到 /mnt/storage 尚未挂载!"
echo "[-] 退出安装,防止数据错误写入 128G 系统固态盘。请检查 storage 脚本。"
exit 1
fi
# 2. 交互输入配置
read -p "请输入你要创建的 Samba 访问用户名 (默认: nas): " SAMBA_USER
SAMBA_USER=${SAMBA_USER:-nas}
echo "[+] 正在安装 Samba..."
apt update
apt install -y samba
# 3. 创建系统专用映射用户
if ! id "$SAMBA_USER" &>/dev/null; then
echo "[+] 创建系统专属数据用户: $SAMBA_USER"
useradd -M -s /usr/sbin/nologin "$SAMBA_USER"
fi
# 4. 设置 Samba 密码
echo "[+] 请为 Samba 用户 [$SAMBA_USER] 设置密码(终端输入不显示):"
smbpasswd -a "$SAMBA_USER"
# 5. 显式判断共享文件夹是否存在
if [ -d "$SHARE_PATH" ]; then
echo "[*] 共享目录已存在: $SHARE_PATH,直接复用。"
chown "$SAMBA_USER:$SAMBA_USER" "$SHARE_PATH"
chmod 775 "$SHARE_PATH"
else
echo "[+] 共享目录不存在,正在新建: $SHARE_PATH"
mkdir -p "$SHARE_PATH"
chown "$SAMBA_USER:$SAMBA_USER" "$SHARE_PATH"
chmod 775 "$SHARE_PATH"
fi
# 6. 配置 /etc/samba/smb.conf
echo "[+] 配置 Samba..."
[ -f /etc/samba/smb.conf ] && cp /etc/samba/smb.conf /etc/samba/smb.conf.bak.$(date +%F_%T)
# 如果之前写入过这块配置,先清理,保证幂等性
sed -i '/\[FamilyShare\]/,+10d' /etc/samba/smb.conf
cat <<EOF >> /etc/samba/smb.conf
[FamilyShare]
comment = Family Storage 1TB
path = $SHARE_PATH
browseable = yes
read only = no
guest ok = no
valid users = $SAMBA_USER
create mask = 0664
directory mask = 0775
force user = $SAMBA_USER
EOF
# 7. 重启并激活服务
echo "[+] 启动 Samba 服务..."
systemctl restart smbd nmbd
systemctl enable smbd nmbd
# 8. 防火墙支持
if command -v ufw &>/dev/null; then
ufw allow samba || true
fi
echo "==================== Samba 配置成功 ===================="
echo "状态: 共享路径 [$SHARE_PATH] 验证正常"
echo "连接地址:"
echo " - Windows 资源管理器地址栏: \\\\192.168.1.200\\FamilyShare"
echo " - macOS / iOS 文件App: smb://192.168.1.200/FamilyShare"
echo "凭据: 用户名 [$SAMBA_USER] / 刚刚设定的密码"
echo "=========================================================="
将上面的脚本保存到/tmp/setup_samba.sh,然后使用sudo bash /tmp/setup_samba.sh。按脚本提示输入信息即可。
💡 个人思考与总结
可选地,在这里可以写一段你对这次对话的个人感悟、验证结果或是总结。