永久解决docker磁盘空间不足
作者:核子猫
注:本文章适用于在UNRAID上以任何形式创建的docker容器,并不仅限于docker-compose、docker cli
玩unraid的朋友应该都知道,把appdata、domains、system等共享文件夹放入由ssd硬盘组成的缓存内能极大的提高unraid的性能,本文将会探讨一下通过修改容器挂载目录的方式,进一步提高容器app表现。减少CPu损耗。
这里我们先模拟一个unraid环境,由多块硬盘组成的阵列设备(Array Devices),一块SSD(也可以是多块)组成的缓存池设备(Pool Devices),名称为cache。你的实际环境可能有多个缓存,阵列里还有校验盘,但道理都是通用的。
以配置一个aria2容器举例,在配置时,一般会将容器的配置等映射到本地存储,比如在宿主机上建立对应容器的config文件夹,此时文件夹有 2 种合法的路径映射:
映射方式1:/mnt/cache/appdata/aria2/config -> 直接挂载在/mnt下对应的磁盘空间内
映射方式2:/mnt/user/appdata/aria2/config -> 挂载在由 unraid 系统虚拟映射出来的用户共享空间
/mnt/cache/appdata和/mnt/user/appdata这2个目录下的内容其实是一模一样的:
/mnt/cache/appdata是appdata目录真正所在的位置(我们在上面设置了这个文件夹只使用缓存)
/mnt/user/appdata则是unraid系统在/mnt/user虚拟出来的(可以当作是一个WIN上的快捷方式便于理解)
/mnt/user同时还有其他用户创建的共享文件夹,例如file、downloads、media等等,这些全部都是虚拟出来的(快捷方式),文件夹里面的内容,实际可能存在于阵列设备(Array Devices)中任意一块硬盘,或者缓存池设备(Pool Devices)中,这就是unraid系统的特色功能SHFS,文件可能存在于不同的磁盘上,但是呈现在用户眼里(/mnt/user),都在聚合在同一个文件夹内。(unraid的smb性能表现差,也和SHFS有关)
但SHFS也不是没有代价的,用户或者某个程序在/mnt/user文件夹内的操作,都需要更多的CPU资源,来计算真正应该去哪一块硬盘读取或者写入哪一个文件。
所以,2种路径映射方式哪一种开销最少也就显而易见了,使用/mnt/cache/appdata可以直接操作我们设置的cache磁盘,绕过了unraid的SHFS,避免了这一步的开销。当然对于aria2这样优化的相当好相当轻量级的应用来说,都大差不差,不过一旦你nas跑的应用足够多、应用IO开销大或者CPU性能比较弱的话,则可以考虑修改路径映射,能省则省嘛
注意:必须要保证存放 docker 数据的appdata共享文件夹设置为:
否则可能会因为部分文件不在cache磁盘(缓存盘)内,而导致容器启动或运行错误。
对于已经部署了不少docker容器或者appdata打散在多个文件夹内的同学,可以考虑以下方式进行迁移:
停止 Docker 服务
设置cache共享文件夹为Use cache pool (for new files/directories):Only
使用unBALANCE插件,将原appdata文件夹内的数据迁移到 SSD 缓存上
启动 Docker 服务
编辑容器设置,将映射路径设置为/mnt/cache/appdata
最后启动容器
针对下载类的容器应用,配置文件夹当然使用/mnt/cache/appdata来映射。
那么下载的目录呢?我个人是这么设想的:
在unraid上建立共享文件夹downloads
1、如果downloads设置为单一硬盘(Included disk(s):Disk1),那么可以直接映射真实磁盘路径/mnt/disk1/downloads;
2、如果downloads设置包括多块硬盘(Included disk(s):Disk1,Disk2),那么只能用虚拟映射/mnt/user/downloads
其实对于下载用途,可以考虑单独设一块硬盘(无所谓固态或机械)作为下载盘,在缓存池设备中添加为一个单盘‘缓存’,并在容器应用中将下载目的地设置为这个单盘‘缓存’(直接使用真实磁盘路径映射/mnt/single_disk_download_cache),下载完成后使用脚本或下载器自带功能将文件转移至阵列设备中的最后存储文件夹(使用虚拟映射/mnt/user/xxx)。
尤其考虑到如果直接用虚拟路径映射到阵列设备的话,下载的时候CPU一边要算文件具体该往哪里写,一边还要做奇偶校验,对系统的影响应该是比较显著的。
下面是一个docker compose的例子:
参考文档:
https://www.reddit.com/r/unRAID/comments/11jne4q/mntcacheappdata_vs_mntuserappdata_whats_the/
https://forums.unraid.net/topic/97165-smb-performance-tuning/
狄树以4060docker仓库的镜像怎么删除 -
余朗审18147162698 ______ docker仓库的镜像的删除方法docker越来越炙手可热,如果你的团队已经准备开始使用docker,那么私有仓库是必不可少的东西,首先是可以帮助你加快从服务器pull镜像的速度,其次也可以帮助你存放私有的镜像,本文主要为大家介绍如何从...
狄树以4060docker守护进程退出,所有容跟着退出有什么好的解决方案 -
余朗审18147162698 ______ Docker容器的架构包括装有主机操作系统的物理机器.主机操作系统上面部署了Docker引擎,引擎有助于构建用来托管运行应用程序的虚拟容器.Docker引擎构建隔离的容器,应用程序就可以部署在这些容器上面.不像典型的虚拟机管理程序...
狄树以4060Docker 运行的容器时间不对,怎么解决 -
余朗审18147162698 ______ docker搭建了lnmp环境后,如果需要访问安装在宿主机上的数据库或中间件,是不能直接使用127.0.0.1这个ip的,这个ip在容器中指向容器自己,那么应该怎么去访问宿主机呢:例如你的docker环境的虚拟ip是192.168.99.100,那么宿主机同样会托管一个和192.168.99.100同网段的虚拟ip,并且会是主ip:192.168.99.1,那么就简单了,在容器中访问192.168.99.1这个地址就等于访问宿主机,问题解决注意,通过192.168.99.1访问宿主机,等于换了一个ip,如果数据库或中间件限制了本机访问或者做了ip段限制,要记得添加192.168.99.1到白名单
狄树以4060如何在GN上安装并运行ubuntu -
余朗审18147162698 ______ 方法/步骤 第一步,下载Ubuntu镜像文件和easybcd软件 或者百度Ubuntu去官网下载最新版 第二步,检查你的电脑是否充足,给你的ubuntu系统设置一个独立的分区,如果不够,笔者设置分区大小为20g的分区 第三步,打开easybcd软件,点击...
狄树以4060如何使用Dockerfile构建镜像 -
余朗审18147162698 ______ docker越来越炙手可热,如果你的团队已经准备开始使用docker,那么私有仓库是必不可少的东西,首先是可以帮助你加快从服务器pull镜像的速度,其次也可以帮助你存放私有的镜像,本文主要为大家介绍如何从公用服务器上讲开放的images...
狄树以4060现在我的磁盘出现文件交簇现象,如何才能解决呢 -
余朗审18147162698 ______ 将文件全部复制到移动硬盘,格盘为NTFS格式,再复制回去.永久解决方案:磁盘用etx3格式
狄树以4060openstack和Docker最根本的区别是什么 -
余朗审18147162698 ______ openstack:它由很多的组件组成,如果没接触过,基本上你会晕头转向.但是我们只要从它试图要解决的问题来看就不难理解它.它是管理服务器/网络/块存储的工具.关于块存储,简单的理解是把一堆磁盘用软件组合成一个大磁盘给操作系统...
狄树以4060电脑重起后电源灯,硬盘灯,键盘都不亮,鼠标还有风扇都正常 -
余朗审18147162698 ______ 要是你电脑的电源已经打开,但是WindowsXP没有正常启动,你就要采取一些故障排除手段.下面说说可能出现的问题以及解决问题的方法. 1、使用Windows启动盘 如果启动问题是由于活动分区的启动记录或者操作系统启动所使用的文件...
狄树以4060磁盘空间不足,无法进行处理.
余朗审18147162698 ______ 现在360的垃圾文件清理工具挺好用的,你可以试着删除一些垃圾文件.或者用系统自带的 开始——程序——附件——系统工具——磁盘清理及碎片整理 清理一下你的硬盘,还有将你C盘及D盘下的temp文件删除,清空IE垃圾文件.
狄树以4060磁盘被写保护要怎么解决 -
余朗审18147162698 ______ 一、查看U盘上面的写保护开关是否打开,该开关与过去使用的软盘原理一样.要是没有开关的话这个可以忽略,看下一个吧~二、查看该U盘的根目录下的文件数目是否以达到最大值,通常格式的应256个.三、在“我的电脑”上点右键-->属性-...