数字化技能提升教程,数字化时代生存宝典

FreeBSD临时文件系统配置

浏览:49

文件转换、临时计算和批量处理经常需要一个存放中间结果的目录。如果这些文件可以重新生成,且不需要跨重启保存,可以考虑使用FreeBSD的tmpfs建立独立临时文件系统,并为它设置明确的容量和权限。

下面在专门的测试目录中完成挂载与验证,不直接替换系统/tmp,也不接管已有业务目录。测试使用32MiB容量上限,便于观察限制是否生效。

一、确认使用条件

tmpfs中的数据在卸载或系统重启后会失效,因此不应将唯一备份、数据库正式数据或尚未保存的业务结果放进去。

内存紧张且系统配置了交换空间时,tmpfs的文件数据可能进入交换空间。不能将它理解为绝对不会写入磁盘的存储方式。

本例应在拥有管理权限的FreeBSD主机或完整虚拟机中执行。Jail内的挂载权限另有约束,不直接套用。

切换到root账号,再进入sh环境。

su -
/bin/sh

查看系统版本和交换空间情况。

freebsd-version
swapinfo -h

执行容量测试前,应确认服务器仍有足够可用内存。内存已经紧张时,先降低测试容量或暂停操作。

二、创建独立挂载目录

本例使用以下目录。

/mnt/tmpfs-lab

创建目录。

mkdir -m 0750 /mnt/tmpfs-lab

如果提示目录已存在,先停止操作。 检查它是否已有文件或挂载内容,不要直接清空后继续。

不使用mkdir -p,是为了让已有目录显式报错,避免误把业务目录当成测试目录。

三、挂载带容量限制的tmpfs

执行挂载。

mount -t tmpfs \
    -o size=32m,inodes=4096,uid=0,gid=0,mode=0750,nosuid,noexec,emptydir,nocover \
    tmpfs /mnt/tmpfs-lab

主要参数含义如下。

  • size=32m设置32MiB文件系统容量上限。
  • inodes=4096限制可用节点数量,文件和目录都会消耗节点。
  • uid=0,gid=0指定文件系统根目录的所有者与组。
  • mode=0750设置根目录权限。
  • nosuid禁止此挂载点中的SUID和SGID位生效。
  • noexec限制直接执行其中的程序。
  • emptydir要求挂载目录为空。
  • nocover避免覆盖已经存在的挂载点。

noexec不能代替完整的安全隔离。例如,其他位置的解释器仍可能读取目录中的脚本并执行。

如果提示不支持tmpfs,可以尝试加载模块后重新挂载。

kldload tmpfs

模块已经内置或加载时,无需重复加载。挂载仍失败,应先检查错误,不要继续向该目录写入测试文件。

四、验证挂载、容量与权限

查看文件系统类型和容量。

df -hT /mnt/tmpfs-lab

确认输出中的类型为tmpfs,挂载点为/mnt/tmpfs-lab。如果显示的是根分区的UFS或ZFS,应先处理挂载失败问题。

检查节点使用情况和目录权限。

df -i /mnt/tmpfs-lab
ls -ld /mnt/tmpfs-lab

进行简单读写测试。

printf '%s\n' 'tmpfs test' > /mnt/tmpfs-lab/check.txt
cat /mnt/tmpfs-lab/check.txt

能够读取刚写入的内容后,再进行容量验证。

本例使用root账号操作。以后交给业务账号使用时,应根据该账号的实际UID和GID调整挂载参数,不要为了方便直接把目录改成所有用户可写。

五、验证容量上限

以下命令只用于刚创建的测试文件系统。执行前再次确认它是容量受限的tmpfs,且其中没有业务数据。

尝试写入40MiB数据。

dd if=/dev/zero \
    of=/mnt/tmpfs-lab/space-test.bin \
    bs=1m count=40

write_status=$?

printf 'Write exit status: %s\n' "$write_status"
df -h /mnt/tmpfs-lab

由于配置的上限为32MiB,正常预期是写入无法全部完成,dd返回非零状态,并出现空间不足相关提示。

这属于有意触发的测试结果。已经写入的部分文件仍会占用空间,应在检查后清理。

rm /mnt/tmpfs-lab/space-test.bin
df -h /mnt/tmpfs-lab

这里只删除本节创建的测试文件,不使用通配符或递归删除。

还要区分容量与节点限制。即使剩余空间较多,节点数量耗尽也会阻止创建新文件,可使用以下命令检查。

df -i /mnt/tmpfs-lab

容量上限不能保证服务器始终有足够物理内存。正式使用时,仍需结合其他服务的内存需求安排。

六、按需配置开机挂载

如果只进行临时测试,可以跳过本节。确实需要开机自动创建该文件系统时,再修改/etc/fstab。

先备份配置。

cp -p /etc/fstab \
    "/etc/fstab.bak.$(date +%Y%m%d-%H%M%S)"

确认目录中只有本次测试文件,且没有程序正在使用它。下一步卸载会使其中的数据失效,需要保留的内容必须先复制到其他文件系统。

离开挂载目录并卸载。

cd /
umount /mnt/tmpfs-lab

卸载失败时先停止,不能把它当成已完成。

编辑fstab。

vi /etc/fstab

保留原有配置,新增以下内容。整条记录必须放在同一行。

tmpfs /mnt/tmpfs-lab tmpfs rw,size=32m,inodes=4096,uid=0,gid=0,mode=0750,nosuid,noexec,emptydir,nocover 0 0

最后两个0表示不安排dump备份,也不安排启动时的fsck检查。

保存后,只测试本次新增的挂载点。

mount /mnt/tmpfs-lab
df -hT /mnt/tmpfs-lab
ls -la /mnt/tmpfs-lab

不要为了验证这一项直接执行mount -a,以免同时触发其他尚未挂载的配置。

重新挂载后,先前的check.txt不会恢复。fstab保存的是挂载规则,不负责保存tmpfs中的文件内容。

如果挂载失败,应立即检查或注释本次新增的配置,不要带着未解决的错误直接重启服务器。

七、安全卸载与撤销配置

停用前,先停止使用该目录的程序,并把需要保存的文件复制到持久存储中。

如果配置过开机挂载,编辑fstab,仅删除或注释本次新增的记录。

vi /etc/fstab

然后离开目录并执行卸载。

cd /
umount /mnt/tmpfs-lab

出现Device busy时,检查是否有Shell仍停留在目录中,或程序仍持有其中的文件。不要直接用强制卸载绕过检查。

卸载成功后,如果不再需要挂载目录,可以删除空目录。

rmdir /mnt/tmpfs-lab

若rmdir提示目录非空,应先查看内容。不要改成递归删除来消除报错。

八、常见问题

1. 为什么重启后目录还在,文件却没有了?

挂载目录保存在原来的文件系统中,可以长期存在。tmpfs中的文件属于临时数据,重启后重新挂载得到的是新的文件系统。

2. 配置了32MiB,为什么应用仍可能内存不足?

文件系统容量限制不能代替整机内存管理。应用进程、系统内核和其他服务同样需要内存,应为它们预留空间,避免仅根据tmpfs容量判断服务器是否安全。

3. 普通用户为什么不能写入?

本例根目录归root所有,权限为0750,普通账号没有写权限。正式交给应用使用时,应确认应用的运行账号,并调整uid、gid和mode,同时保持手动挂载与fstab中的配置一致。

4. 哪些文件适合放入tmpfs?

可以重新生成、允许在重启后丢失的中间文件更适合。对于需要留存的结果,应在任务成功后写入持久存储,并验证保存完成,不能只依靠tmpfs中的副本。

广告合作

广告合作

QQ群号:4114653

QQ群号:4114653

温馨提示:
  1. 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
  2. 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。