錯誤試行

PCや生活の試行錯誤の成果を報告するブログ

ファイラーrangerでゴミ箱を使う with NTFSパーティション

CLIのファイラーrangerはファイルの削除動作を行なうと標準では(スペース選択してからなら確認は入るものの)いきなりファイルが削除されてしまうためゴミ箱機能を使えるようにしたい。trash-cli(公式GitHub)を使うことでゴミ箱機能を実現できるが、trash-cliのファイルをゴミ箱に入れるコマンドであるtrash-putをrmのエイリアスに設定しておいてもranger上で削除操作をする際には有効にならない。
rangerの削除動作をtrash-putと連携させるにはrangerの設定ファイル~/.config/ranger/rc.confを以下のように変更すればよい。

# map dD console delete
map dD shell -s trash-put %s

how to use trash-cli with ranger – code yarns

ゴミ箱の中身を見るにはtrash-listコマンドを使うが、標準だとばらばらに表示され使いにくい。ゴミ箱の中身を日付逆順にソートして表示するには以下のようにsortコマンドに渡せばよい。

trash-list | sort -k 1 -r

NTFSパーティション

ここまでは簡単だったが、ゴミ箱の中身を見ようとtrash-listコマンドを実行すると以下のように出てNTFSパーティションで削除したファイルだけが表示されない(ここではNTFSパーティションのマウント先パスを/mnt/hddとする)。trash-putしたファイル自体は/mnt/hdd/.Trash/1000に存在している。

trashdir skipped because parent not sticky: /mnt/hdd/.Trash/1000

/etc/fstabは以下の通り設定していた。

 uuid="00000DUMMY000000" /mnt/hdd     ntfs    rw,nosuid 0 0
解決方法

まず、/etc/fstabのマウントオプションに"permissons"を追加し、NTFSパーティションをマウントし直す。

 UUID="00000DUMMY000000" /mnt/hdd     ntfs    rw,permissions,nosuid 0 0
 # ↑オプションに"permissons"を増やしただけ

次に、.Trashディレクトリにスティッキービットを設定するとともに、.Trash以下のオーナーをログインIDに変更すればよい(以下の例ではログインIDをhogeとしている)。

 sudo chmod 1777 /mnt/hdd/.Trash/
 sudo chown -R hoge:hoge /mnt/hdd/.Trash/
試行錯誤の記録

ここからは解決に至るまでの試行錯誤の内容。なお、解決に要した時間は3時間だった。

調べてみると、trash-cli公式GitHubのIssue(Problem using Trash on a usb key · Issue #59 · andreafrancia/trash-cli)にてtrash-cliは.Trashディレクトリにスティッキービットが立っていることが必要だが、NTFSパーティションはスティッキービットを立てられないとの内容が見付かった。他のIssueでも作者が以下のようにスティッキービットを立てられないファイルシステムはサポートしていないとコメントしている。

andreafrancia commented on 2 Jan
trash-cli does not support filesystem that does not allow to set the sticky bit.
trash-empty not working for partitions · Issue #65 · andreafrancia/trash-cli

何とかならないかと探していたところTuxera Support - View topic - Cannot mount NTFS with the Sticky bitntfs-3g を使って NTFS に書き込む - ぽち*ぷ〜ちにてntfs-3gコマンドの存在を知る。ただし、毎回ntfs-3gコマンドを実行してマウントするのは実用的ではないのでfstabに記述する方法を調べた。
fstabに記述するには以下のようにntfsの代わりにntfs-3gを指定しオプションにpermissionsを指定すれば良いようだ。

 UUID="00000DUMMY000000" /mnt/hdd     ntfs-3g    rw,permissions,nosuid 0 0

permissions - How do I correctly mount a NTFS partition in /etc/fstab? - Ask Ubuntu

これでNTFSパーティションディレクトリでも以下のようにスティッキービットが立つ。

 chmod 1777 /mnt/hdd/.Trash
 ls -ld /mnt/hdd/.Trash
 drwxrwxrwt 1 root root 0 11 10:10 /mnt/hdd/.Trash

これで良いかと思われたが、実際にNTFSパーティションのファイルを削除すると以下のようにファイルがゴミ箱に移動できない旨のエラーが出る。

trash-put hoge
trash-put: cannot trash regular file 'hoge'

そこで、.Trashディレクトリ以下全てのディレクトリをログインユーザ(以下の例ではhoge)の所有にしてみたところうまくいき、trash-listでNTFSパーティションのファイルも表示されるようになった。

 sudo chown -R hoge:hoge /mnt/hdd/.Trash/

さらに調べるとUbuntu 16.04でntfsntfs-3gへのシンボリックリンクになったとのこと。

Re: NTFS or NTFS-3G
Just ran this in Ubuntu 16.04 in case something changed:
tester@vub1604:~$ ls -l /sbin/mount.ntfs
lrwxrwxrwx 1 root root 13 Apr 23 18:14 /sbin/mount.ntfs -> mount.ntfs-3g
It would appear that "ntfs" is still a symbolic link to "ntfs-3g".
[SOLVED] NTFS or NTFS-3G

そこで以下のように/etc/fstabの"ntfs-3g"を"ntfs"に変えてマウントし直してみたところスティッキービットは立っていた。結局マウントオプションの「permissions」の有無だけがキモだった模様。

 UUID="00000DUMMY000000" /mnt/hdd     ntfs    rw,permissions,nosuid 0 0

マウントオプションのpermissionsについてはmountコマンドのマニュアルを見ても掲載が無く、検索してもこれと言った情報が出て来なかった。

参照サイト

trash-cli公式GitHub。FAQにtrash-putをrmのエイリアスにするべきではないと書いてある。

trash-cliパッケージのコマンド一覧が掲載されている。現在はややコマンド名が異なっており以下のようになっている。

コマンド名 機能
trash(trash-put) ファイルを削除する
trash-list ゴミ箱の中身を見る
restore-trash ゴミ箱からファイルを復元する
trash-empty ゴミ箱を空にする
trash-rm 指定した日数以前のファイルをゴミ箱から削除する

fstabでpermissionsオプションを設定したが、マウント後にmtabを見るとオプション設定がdefault_permissionに上書きされているのはなぜか?という質問。mountオプションのpermissionについての記述がある。permissionオプションが何か?についての記載はない。

NTFSパーティションをマウントするとrootの所有となりパーミッションが777になってしまうが正しく設定する方法はあるか?という質問。mountオプションのpermissionについて以下のようにpermissionオプションを付けるとchmodやchownが動作するとの回答がある。permissionオプションが何か?についての記載はない。

answered Panther Mar 17 '12 at 15:24
If you mount the ntfs partition with the permissions option, then chmod / chown will work
/dev/sda2 /mnt/excess ntfs-3g permissions,locale=en_US.utf8 0 2

answered CMP Aug 3 '15 at 3:19
UUID=xxxxxxxxxxxxxxxxx /media/mydrivename ntfs permissions,locale=en_US.utf8 0 2