暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 overlay 文件系统拼接大目录

生有可恋 2022-11-30
1830

早期 linux 拼接多个目录的内容到一个目录,只能通过软链接,新的 linux 内核带的 overlayfs 支持将多个目录内容重新挂载至一个目录。

使用 overlay 文件系统的这个特性,我们可以把两个50T的目录合并成一个100T的目录,并且不改变目录结构。比如医学影像系统,即我们俗称的PACS系统,它存储的文件都在一个目录中。当需要做数据迁移时,只能找一个更大的目录来存,不然原目录内容就需要拆分。

有了 overlayfs ,我们就可以将拆分后的目录重新组合成一个目录。为了说明目录结构间的变化 ,我们以真实场景进行举例,比如原存储目录内容为平面按天存储。长年累月使用之后,目录会变得非常大,非常不利于数据迁移。

我们把原数据按年迁移至新的目录 2018、2019、2020,新的目录在不同的存储介质上。因新存储比老存储空间小,所以拆成多个目录存储。将多个目录通过 NFS 挂载在一台主机上。然后通过如下操作将多个目录合并成一个目录。

    # 挂载多个存储至一台主机
    mount 192.168.1.1:/pacs/2018 2018
    mount 192.168.1.2:/pacs/2019 /2019
    mount 192.168.1.3:/pacs/2020 /2019


    # 准备 overlay 挂载目录
    mkdir -p newpacs
    mkdir -p newpacswork


    # 挂载 只读 overlay 文件系统
    mount -t overlay overlay \
    -o lowerdir=/2018:/2019:/2020,\
    workdir=/newpacswork newpacs

    其中 lowerdir 是原始目录,workdir 在使用中一直是空目录,是 overlay 需要的,最终目录为 newpacs 。使用以上命令挂载的新的目录与拆分前的目录结构一致,所有数据都在一个目录中。这里没有用到 overlay 的 upperdir 参数,所以挂载出来的目录是只读的。

    如果启用 upperdir 参数,则挂载目录 newpacs 是可写的,所有改变的部分会存储至 upperdir 目录。修改后可读写的挂载命令如下:

      # 准备 upperdir 目录
      mkdir -p /newpacsupper


      # 挂载 可读写 overlay 文件系统 
      mount -t overlay overlay \
      -o lowerdir=/2018:/2019:/2020,\
      upperdir=/newpacsupper,\
      workdir=/newpacswork /newpacs

      注意 -o 选项后面的 lowerdir 、upperdir、workdir 逗号之间不能有空格,不然会报错。对于 lowerdir 来说,overlay 文件系统会将其作为只读目录处理,不会写入原目录。所有变动部分会体现在 upperdir 目录中。当删文件时,只会在 upperdir 目录中留下一个标记,并不会真的删除原目录内容。写入的文件也同样生成新的文件,不会覆盖 lowerdir 中的原文件。

      overlay 文件在 docker 中用得比较多,这里我们把它拿来处理 PACS 存储迁移后文件合并的场景。

      全文完。


      如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。


             

      文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论