searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

podman volume 挂载 mergerfs

2023-09-19 01:22:52
47
0

mergerfs 是什么:

我们有很多中方式管理并使用硬盘,如下面几种:

  • raid,其中细分的有 RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60
  • lvm
  • Btrfs
  • zfs
  • JBOD

等等,他们之间每一个的特点这里不细讲,他们各有优劣,也并不是完全互斥的关系,有些可以组合使用,总之应该都耳熟能详的。这里将补充另外一种稍微少见的、特别的文件系统 mergerfs。


mergerfs 的官方介绍如下:

mergerfs 是一个联合文件系统,旨在简化跨众多品类存储设备的文件存储和管理。

假设这样一种场景:

你有几块不同品牌的硬盘,容量不一,且文件系统有  ntfs, xfs, ext4 等几种,里面都有一个 videos 文件夹,里面有你存放的视频/照片。现在想装在服务器内,提供一个统一的入口访问这些散落在各个硬盘上的文件。以上面所说的几种组织数据的方式来说(raid, lvm, zfs...),倒腾数据,重新建立文件系统是避免不了的。那有没有更简单的方法呢?mergerfs 可以做到,其效果如下, A 文件系统内的 /disk1 和 B 文件系统内的 /disk2 通过一种方式挂载到一个新的目录 /merged:

A         +      B        =       C
/disk1           /disk2           /merged
|                |                |
+-- /dir1        +-- /dir1        +-- /dir1
|   |            |   |            |   |
|   +-- file1    |   +-- file2    |   +-- file1
|                |   +-- file3    |   +-- file2
+-- /dir2        |                |   +-- file3
|   |            +-- /dir3        |
|   +-- file4        |            +-- /dir2
|                     +-- file5   |   |
+-- file6                         |   +-- file4
                                  |
                                  +-- /dir3
                                  |   |
                                  |   +-- file5
                                  |
                                  +-- file6

此方式无视了文件系统种类,已经硬盘大小,建立了一个新的“存储池”,访问这个存储池能读写各个硬盘上的文件系统,且建立过程中对数据无任何变动。


相对于 LVM/ZFS/BTRFS/RAID0 驱动器串联/条带化 的优势是:

     对于简单的 JBOD/驱动器串联/剥离/RAID0,单个驱动器故障将导致整个池故障。 mergefs 执行类似的功能,并且不会出现灾难性故障和恢复困难。 驱动器可能会出现故障,但是所有其他数据将继续可访问。

相对于 ZFS 的优势则是:

  mergefs 与 ZFS 并非替代关系。 mergefs 旨在提供任意文件系统(本地或远程)、任意大小和任意文件系统的灵活池化。 对于一次写入,可以读取许多用例,例如大容量媒体存储。 通过其他方式管理数据完整性和备份。 在这种情况下,ZFS 可能会引入许多成本和限制(ecc 内存&高容量内存等)

但也有明显的缺点:

性能不够好,像数据库,虚拟机的虚拟硬盘不适合存放在 mergerfs 挂载的目录上,这可能与其基于 FUSE 实现而非在内核实现有关系。


下面讲一下安装使用方式:

如果不确定自己的使用场景,下面两个 mount 选项任选一种就行

需要 mmap ( rtorrent 和很多基于 sqlite3 的应用需要用到)

cache.files=partial,dropcacheonclose=true,category.create=mfs

You don't need mmap

cache.files=off,dropcacheonclose=true,category.create=mfs

1. 命令行挂载:

mergerfs -o cache.files=partial,dropcacheonclose=true,category.create=mfs /mnt/hdd0:/mnt/hdd1 /media

2. /etc/fstab 持久化挂载

/mnt/hdd0:/mnt/hdd1 /media fuse.mergerfs cache.files=partial,dropcacheonclose=true,category.create=mfs 0 0

3. systemd 挂载

[Unit]
Description=mergerfs service

[Service]
Type=simple
KillMode=none
ExecStart=/usr/bin/mergerfs \
  -f \
  -o cache.files=partial \
  -o dropcacheonclose=true \
  -o category.create=mfs \
  /mnt/hdd0:/mnt/hdd1 \
  /media
ExecStop=/bin/fusermount -uz /media
Restart=on-failure

[Install]
WantedBy=default.target
挂载选项还有很多,可以参考官方的页面
 
4. podman volume 挂载
 
podman volume 可以挂载 nfs, smb ,不仅如此,也可以挂载 mergerfs(docker 同理)
 
podman volume create --opt device=/path1:/path2 --opt type=fuse.mergerfs --opt o=cache.files=partial,dropcacheonclose=true,category.create=mfs merged_volume_name
0条评论
0 / 1000
Frost
3文章数
0粉丝数
Frost
3 文章 | 0 粉丝
Frost
3文章数
0粉丝数
Frost
3 文章 | 0 粉丝
原创

podman volume 挂载 mergerfs

2023-09-19 01:22:52
47
0

mergerfs 是什么:

我们有很多中方式管理并使用硬盘,如下面几种:

  • raid,其中细分的有 RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60
  • lvm
  • Btrfs
  • zfs
  • JBOD

等等,他们之间每一个的特点这里不细讲,他们各有优劣,也并不是完全互斥的关系,有些可以组合使用,总之应该都耳熟能详的。这里将补充另外一种稍微少见的、特别的文件系统 mergerfs。


mergerfs 的官方介绍如下:

mergerfs 是一个联合文件系统,旨在简化跨众多品类存储设备的文件存储和管理。

假设这样一种场景:

你有几块不同品牌的硬盘,容量不一,且文件系统有  ntfs, xfs, ext4 等几种,里面都有一个 videos 文件夹,里面有你存放的视频/照片。现在想装在服务器内,提供一个统一的入口访问这些散落在各个硬盘上的文件。以上面所说的几种组织数据的方式来说(raid, lvm, zfs...),倒腾数据,重新建立文件系统是避免不了的。那有没有更简单的方法呢?mergerfs 可以做到,其效果如下, A 文件系统内的 /disk1 和 B 文件系统内的 /disk2 通过一种方式挂载到一个新的目录 /merged:

A         +      B        =       C
/disk1           /disk2           /merged
|                |                |
+-- /dir1        +-- /dir1        +-- /dir1
|   |            |   |            |   |
|   +-- file1    |   +-- file2    |   +-- file1
|                |   +-- file3    |   +-- file2
+-- /dir2        |                |   +-- file3
|   |            +-- /dir3        |
|   +-- file4        |            +-- /dir2
|                     +-- file5   |   |
+-- file6                         |   +-- file4
                                  |
                                  +-- /dir3
                                  |   |
                                  |   +-- file5
                                  |
                                  +-- file6

此方式无视了文件系统种类,已经硬盘大小,建立了一个新的“存储池”,访问这个存储池能读写各个硬盘上的文件系统,且建立过程中对数据无任何变动。


相对于 LVM/ZFS/BTRFS/RAID0 驱动器串联/条带化 的优势是:

     对于简单的 JBOD/驱动器串联/剥离/RAID0,单个驱动器故障将导致整个池故障。 mergefs 执行类似的功能,并且不会出现灾难性故障和恢复困难。 驱动器可能会出现故障,但是所有其他数据将继续可访问。

相对于 ZFS 的优势则是:

  mergefs 与 ZFS 并非替代关系。 mergefs 旨在提供任意文件系统(本地或远程)、任意大小和任意文件系统的灵活池化。 对于一次写入,可以读取许多用例,例如大容量媒体存储。 通过其他方式管理数据完整性和备份。 在这种情况下,ZFS 可能会引入许多成本和限制(ecc 内存&高容量内存等)

但也有明显的缺点:

性能不够好,像数据库,虚拟机的虚拟硬盘不适合存放在 mergerfs 挂载的目录上,这可能与其基于 FUSE 实现而非在内核实现有关系。


下面讲一下安装使用方式:

如果不确定自己的使用场景,下面两个 mount 选项任选一种就行

需要 mmap ( rtorrent 和很多基于 sqlite3 的应用需要用到)

cache.files=partial,dropcacheonclose=true,category.create=mfs

You don't need mmap

cache.files=off,dropcacheonclose=true,category.create=mfs

1. 命令行挂载:

mergerfs -o cache.files=partial,dropcacheonclose=true,category.create=mfs /mnt/hdd0:/mnt/hdd1 /media

2. /etc/fstab 持久化挂载

/mnt/hdd0:/mnt/hdd1 /media fuse.mergerfs cache.files=partial,dropcacheonclose=true,category.create=mfs 0 0

3. systemd 挂载

[Unit]
Description=mergerfs service

[Service]
Type=simple
KillMode=none
ExecStart=/usr/bin/mergerfs \
  -f \
  -o cache.files=partial \
  -o dropcacheonclose=true \
  -o category.create=mfs \
  /mnt/hdd0:/mnt/hdd1 \
  /media
ExecStop=/bin/fusermount -uz /media
Restart=on-failure

[Install]
WantedBy=default.target
挂载选项还有很多,可以参考官方的页面
 
4. podman volume 挂载
 
podman volume 可以挂载 nfs, smb ,不仅如此,也可以挂载 mergerfs(docker 同理)
 
podman volume create --opt device=/path1:/path2 --opt type=fuse.mergerfs --opt o=cache.files=partial,dropcacheonclose=true,category.create=mfs merged_volume_name
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0