2019年6月5日 星期三

avfs: 不必解開, 直接把壓縮檔當成目錄大搖大擺走進去

我每年會備份一次個人檔案。 硬碟上有歷年的 .tgz 備份檔。 有時需要把舊文件挖出來看。 問題是: 不記得我要的檔案在哪一年份的備份裡。 於是逐年 [解壓縮、 搜尋、 刪掉] 直到找到為止, 有點麻煩。 今天終於發現一招好用的方案: 採用 AVFS。

首先安裝 avfs 套件: sudo apt install avfs。 然後用普通用戶的身份執行 mountavfs 。 再下 mount 指令查看, 會看到多出一列類似這樣:

avfsd on /home/$USER/.avfs type fuse.avfsd (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)

進入 /home/$USER/.avfs/home/$USER , 裡面看起來跟家目錄沒什麼兩樣。 但是! 隨便找一個 .tgz 或 .zip 的壓縮檔, 在它的檔名後面加上 "#" , 就變成了一個目錄, 可以 cd 進去。 例如我有一個 /home/$USER/etc.tgz , 於是我可以: cd /home/$USER/.avfs/home/$USER/etc.tgz# (把 $USER 換成你的用戶名稱)。 就這樣, 超簡單。 以後就可以直接用 find 到每個壓縮檔裡面去找我要的檔案了!

用完以後, 可以下 umountavfs 取消 avfs。 不過因為反正它是唯讀的, 其實留著也沒差。

如果嫌 /home/$USER/.avfs 這個路徑太囉嗦, 也可以先 export AVFSBASE=/avfs 之類的, 然後才 mountavfs 。 前提是: $USER 這個用戶對掛載點必須有讀寫權限。 這是閱讀 /usr/bin/mountavfs (它是一個 shell script) 學來的。

另一種使用方式是採用 avfscoda, 不過安裝時這需要編譯 kernel 模組, 感覺比較麻煩; 最終的好處是跟既有的檔案系統整合, 不需要有另一個獨立的掛載點。 是說... 既然可以設定 AVFSBASE 改目錄, 這個優點好像也就沒那麼重要了。

* * * * *

昨天上課在 proxmox 上面遇到奇怪的問題, 今天爬文讀到這篇 fuse 檔案系統簡介, 發現了 avfs 這個好物, 然後下午的工作就歪樓了 orz 。 另一個透過 fuse 實現的好用功能是 SSHFS:透過 SSH 掛載遠端 Linux 伺服器上的硬碟(適用於 Windows、Mac OS X 與 Linux)。 Fuse 可以把壓縮檔跟遠端伺服器的目錄通通納入本地的檔案系統底下, 這簡直是... 真的要征服宇宙了嗎?

沒有留言:

張貼留言