archivemountで圧縮/書庫ファイルを一般ユーザでマウントして中身にアクセス

Last modified: 2020-10-21

archivemountとは

archivemountはFUSE(Filesystem in Userspace)用のファイルシステムの1つで、これを使用すると、圧縮された様々な形式のファイルをマウントして、その中身に対して圧縮されているとは意識せずに、マウントポイント以下の階層を通して通常のファイル/ディレクトリのような感覚で中身にアクセスできる。

概要

  • FUSEを使用したユーザ空間のファイルシステム
    • 一般ユーザ権限でマウント/マウント解除でき、管理者権限がなくても使える
    • FUSEに対応したOSであればGNU/Linuxに限らず色々なOSで利用できる
  • libarchiveというライブラリを使用しており、サポートされる形式もこれに準ずる
    • ISO9660イメージもサポートされており、一般ユーザ権限でこれをマウントするのに使うfuseiso(2007年から更新されていない)を置き換える使い方もできる
      • バージョン0.8.8未満ではディレクトリ構成によっては一部の階層の中身が読み込めない不具合がある(新しいバージョンでは修正されている)
    • .tar.bz2のような圧縮tarballや無圧縮tarballの他、cpio形式のファイルも扱える
  • 公式サイトは https://www.cybernoia.de/software/archivemount.html
  • データの書き込みもサポートしているが、大事なデータを含む圧縮ファイルで使用することはおすすめできない

Squashfsとの違い

  • archivemountは扱えるファイル形式が専用の独自形式に限定されずに一般的な圧縮・書庫ファイルの形式を使用する
  • SquashfsはLinuxカーネルのファイルシステムサポートによってマウントされ、基本的には一般ユーザはマウントやマウント解除を行えない

FuseCompressとの違い

  • FuseCompressはファイルシステムというよりも個別のファイルに対する圧縮/伸長機能のみを提供するもので、マウントポイント以下への読み書き時に、実際のデータ保存ディレクトリ側へ圧縮されたデータを読み書きする形

インストール

  • この記事が元々書かれた2008年2月の時点ではパッケージの提供されているディストリはほとんどなかったが、2018年時点では既に多数のディストリでarchivemountの名前でパッケージが提供されており、各ディストリのパッケージマネージャで同名のパッケージをインストールできる
    • 一部のディストリでは “fuseisoのパッケージがないがarchivemountはある” ということがあり、ISO9660イメージのマウントのみの用途で導入することも考えられる

使い方

archivemountコマンドに、マウントするファイル名とマウントポイント(一般ユーザで使用する場合はホームディレクトリ以下に作成しておく)を指定してマウントする。

下の例では、あらかじめ[ホームディレクトリ]/mnt/というディレクトリを作成しておいてマウントポイントとして使用している。ファイル名は例なので、これも実際のものに合わせて実行する。

(読み取り専用でマウントする例)
$ archivemount -o ro file.tar.bz2 ~/mnt/

(書き込みもできるようにする場合の例)
$ archivemount file.tar.bz2 ~/mnt/

マウントがされると、マウントしたファイルの内容に対してマウントポイント(上の例では[ホームディレクトリ]/mnt/)以下を通してアクセスできるようになる。

マウント解除はFUSEの一般的な形でfusermount -uの後ろにマウントポイントを指定する。

(マウントを解除)
$ fusermount -u ~/mnt/