ディレクトリバックアップ バックアップイメージ作成のためのSquashFS

Page content

SquashFSとは

  • ファイルのバックアップ用ファイルシステム
  • 特定のディレクトリを、イメージファイルへ圧縮
  • 圧縮したファイルをマウント可能(リードオンリー)

たとえば、このような用途が想定される。

  • 比較的容量が大きく、そしてファイル数も多量にあるディレクトリがある

  • しかし、そのディレクトリはあまり使われていない。

  • よって、普段はイメージファイルに圧縮してバックアップを取り、必要に応じて参照したい。

  • ついでに、重要なファイルも多いためリードオンリーでマウントしたい。

私の場合は、鳥人間現役時代のファイル(700GB程度)をアーカイブ化するために用いた。もちろん、そのままNASにrsyncしてもいいのだと思う。しかし、ファイル数が多く、セクタサイズより小さいファイルも結構有ったため、馬鹿正直にバックアップを取るには正直面倒。かといってtarにしてしまうと、ファイルを参照する際いちいち展開しなければならずそれもまた面倒…。ということで、第三の道を探ったらここにたどり着いた。

インストール方法

yum install squashfs-tools

等。aptでも同様のパッケージ名だと思われる。

Macでのインストール方法

brew install squashfs

簡単な使用方法

mksquashfs /圧縮元 /圧縮先 -comp gzip

この場合圧縮先へgzipで圧縮される。圧縮方式はxz,gzip,lzoなどから選択可能。

###圧縮方式の比較

  • 圧縮率での比較: xz<gzip<lzo
  • 展開速度での比較:lzo<gzip<xz

全体のバランスを考えるとgzip辺りにしておくのが無難らしい。

圧縮してみた

実際に圧縮してみたところ、元フォルダの75%程度の容量となった。822GBが619GBまで圧縮できたのでかなり優秀と言えるのでは。バックアップも取りやすくなった。

マウント方法

mount -o loop /バックアップファイル /MountPoint/
ファイルをあたかもデバイスのように見せかけることをループバックマウントと言うらしい。

MacOSXでのマウント

これがちょっとめんどくさい。MacOSでは標準でSquashFSをサポートしていないらしい。そこで、MacFuzeを経由したマウント方法になる。もしかしたら、カーネルにsquashFSが入っていないLinuxとかでも応用できるかもしれない。要するにNETGEARのReadyNASとか。

前提条件

導入のために、automake libtool autoconfの導入が必要。Homebrewから導入可能。

MacFuze(OSXFuze)のインストール

ココからインストーラーを落としてきてインストール。

squashfuseのコンパイル&インストール

なお、コンパイル時に導入するコマンド群のインストールのため、予めhomebrewが必要になってくる。インストール方法は

git clone http://github.com/vasi/squashfuse
./autogen.sh  
configure``
make

makeまで終わったら、パスが通っている位置に、squashfsをコピーする。

導入のために、automake libtool autoconfの導入が必要。

ここまで済んだら、やっとマウントできる。

    バックアップの生成 mksquashfs DIRECTORY ARCHIVE
    マウント         squashfuse /アーカイブファイル /マウントポイント
    アンマウント      umount MOUNTPOINT(Mac,BSD)
                    fusermount -u MOUNTPOINT(Linux)

重要な注意点

マウントした際に、下記のような現象が起こる。

1.マウントしたディレクトリが、Finderから見えなくなる。コンソールからは見える。
2.マウント先のディレクトリ名に関係なく、「OSXFUSE Volume0」にマウントされる模様。

かといって、適当なマウント先を指定してはダメ。
例えば、/Volumes/datahddにデータが保存されていて、ファイルのコピーなどのジョブが走っているとする。その時、うっかり/Volumes/datahddにマウントしてしまうと、その瞬間Finderからdatahddが消える。そして、コピー中のプロセスなどは全てエラー終了する。どうやらアンマウントに近い状況になるらしい。

結言

 鳥人間時代のサーバーに保管されていたデータを、引退時個人ストレージへ複写している。容量はおよそ700GB程度あるが、当時の"おもひで"的なものであって滅多に参照されるものではない。しかし、引退時にサーバーより消去してきた個人データも少なからず有り、もしかしたら必要になるかもしれない。

 NASを新調したことにより、冗長性の確保されているストレージが4TB確保できた。しかし、CPUがARMでありメモリは512MBとおおよそRaspberry Pi初代と同レベルである。このNASに大量のデータ&ファイルを入れるとどうなるかは自明であろう。というわけで、圧縮し都合のいい時にはマウント可能な方法を探し、SquashFSに行き着いた。
 
 

参照先

SquashFSで圧縮ファイルをマウントする

SquashFSをマウントするまで

SquashFSの圧縮形式