查看“︁OverlayFS”︁的源代码
←
OverlayFS
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== 说明 == OverlayFS是一个堆叠文件系统,其在[[Linux]]上比较常见。 OverlayFS可把一个或者多个目录按照某种方式堆叠的合并目录挂载到另一个目录上,不需要设备文件。 由于OverlayFS不需要设备文件(使用overlay作为设备名称),故在使用mount挂载时,需要使用-t选项指定文件系统为overlay,使用-o选项指定挂载的参数(下列为主要参数): {| class="wikitable" !选项名称 !说明 |- |lowerdir |字符串,底层目录,必须指定底层目录,当上层目录未找到的文件将在底层目录中寻找。 |- |upperdir |字符串,上层目录,文件优先在上层目录查找,写入的文件只写入上层目录,当不指定上层目录时为只读挂载 |- |workdir |字符串,工作目录。 |- |redirect_dir |枚举值,其值可为off、follow、nofollow、on。 |- |index |枚举值,其值可为off、on。 |} 使用OverlayFS可将一个只读的目录改为可写目录,具体做法为将lowerdir与挂载的目录均指定为需要修改的目录,挂载后所有新的访问将访问OverlayFS实现可写挂载(已经打开的访问仍访问原目录)。 == 脚本 == === 将脚本所在目录挂载为OverlayFS === <syntaxhighlight lang="bash" line="1"> #!/bin/bash #遇到错误立即退出 set -e #设置overlay挂载的tmp路径 if [ -d "${TMP_OVERLAY_DIR}" ] then echo TMP_OVERLAY_DIR is ${TMP_OVERLAY_DIR} else export TMP_OVERLAY_DIR=/tmp/overlay echo TMP_OVERLAY_DIR is ${TMP_OVERLAY_DIR} fi #检查工具是否存在,$1为待检查的工具名。 function CheckTool { [ -n "$1" ] || { echo -e "\033[41;37mCheckTool 参数错误!!\033[40;37m"; return 255; }; ToolPath=`which $1`; [ -e "$ToolPath" ] || { echo -e "\033[41;37m$1 不存在,请先安装此工具\033[40;37m"; return 255; }; return 0; } #获取脚本所在目录,成功时导出ScriptDir变量 function GetScriptDir { self_path="" # shellcheck disable=SC2128 # ignore array expansion warning if [ -n "${BASH_SOURCE-}" ] then self_path="${BASH_SOURCE}" elif [ -n "${ZSH_VERSION-}" ] then self_path="${(%):-%x}" else echo -e "\033[41;37m不能获取工作目录\033[40;37m"; return 1 fi # shellcheck disable=SC2169,SC2169,SC2039 # unreachable with 'dash' if [[ "$OSTYPE" == "darwin"* ]]; then # convert possibly relative path to absolute script_dir="$(realpath_int "${self_path}")" # resolve any ../ references to make the path shorter script_dir="$(cd "${script_dir}" || exit 1; pwd)" else # convert to full path and get the directory name of that script_name="$(readlink -f "${self_path}")" script_dir="$(dirname "${script_name}")" fi export ScriptDir=${script_dir} return 0 } #检查必要的工具 CheckTool mount [ $? -eq 0 ] || exit; CheckTool mkdir [ $? -eq 0 ] || exit; CheckTool grep [ $? -eq 0 ] || exit; CheckTool id [ $? -eq 0 ] || exit; CheckTool chmod [ $? -eq 0 ] || exit; CheckTool stat [ $? -eq 0 ] || exit; #获取当前脚本所在目录 GetScriptDir echo ScriptDir is ${ScriptDir} #检查是否支持overlay if [ -z "`cat /proc/filesystems | grep -Fw overlay `" ] then echo -e "\033[41;37m不支持overlay\033[40;37m"; exit; fi #检查是否已挂载overlay if [ -n "`mount | grep -Fw overlay | grep -Fw ${ScriptDir} `" ] then echo -e "\033[41;37m已经挂载overlay\033[40;37m"; exit; fi #检查是否为root用户 if [ `id -u` -ne 0 ] then echo -e "\033[41;37m挂载文件系统需要root用户\033[40;37m"; exit; fi #准备相关目录 if [ -d "${TMP_OVERLAY_UPPER_DIR}" ] then echo TMP_OVERLAY_UPPER_DIR is ${TMP_OVERLAY_UPPER_DIR} else export TMP_OVERLAY_UPPER_DIR=${TMP_OVERLAY_DIR}/${ScriptDir}/upper mkdir -p ${TMP_OVERLAY_UPPER_DIR} echo TMP_OVERLAY_UPPER_DIR is ${TMP_OVERLAY_UPPER_DIR} fi if [ -d "${TMP_OVERLAY_WORK_DIR}" ] then echo TMP_OVERLAY_WORK_DIR is ${TMP_OVERLAY_WORK_DIR} else export TMP_OVERLAY_WORK_DIR=${TMP_OVERLAY_DIR}/${ScriptDir}/work mkdir -p ${TMP_OVERLAY_WORK_DIR} echo TMP_OVERLAY_WORK_DIR is ${TMP_OVERLAY_WORK_DIR} fi #设置目录权限 chown -R `stat -c %g ${ScriptDir}`:`stat -c %u ${ScriptDir}` ${TMP_OVERLAY_UPPER_DIR} chown -R `stat -c %g ${ScriptDir}`:`stat -c %u ${ScriptDir}` ${TMP_OVERLAY_WORK_DIR} #挂载overlay mount -t overlay -o lowerdir=${ScriptDir},upperdir=${TMP_OVERLAY_UPPER_DIR},workdir=${TMP_OVERLAY_WORK_DIR} overlay ${ScriptDir} </syntaxhighlight>此脚本可将脚本所在目录挂载OverlayFS,将对该目录的新读写保存在/tmp目录。 注意: * 执行此脚本后应当退出脚本目录再重新进入。如需卸载OverlayFS,需要先退出该目录再使用umount命令卸载。 * 若提示不支持overlay可尝试使用modprobe命令加载overlay并使用/etc/modules实现自动加载。 * 当安装某些软件(docker、snap)后,会自动加载overlay。 == 官方资料 == * https://docs.kernel.org/filesystems/overlayfs.html
返回
OverlayFS
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息