ディレクトリとサブボリュームを区別する方法は?

ディレクトリとサブボリュームを区別する方法は?

GNU/Linuxでディレクトリとbtrfsサブボリュームを区別する最良の方法は何ですか

私はそれらが同じように見なければならないことを知っている。それは素晴らしいです。しかし、メンテナンス目的でディレクトリを表示するときは、それが単純なディレクトリかサブボリュームかを知りたいと思います。 (その場合はインストールされているか、インストールされている場合はどのように、どこにインストールされているかを知ることをお勧めします。)

目的:たとえば、提案されているようにサブボリュームの構造を変更したいと思います。ここ。私が何をしているのかを確認する方法が必要です。ありがとうございます。 :-)


私が見たもの:

出力ls -dまたはtree -dフォルダを表示するが区別しない目次そしてBtrfs サブボリューム。それらを使用すると、ls -l実際には同じように見えます。

でもls --classifyそしてls --file-typeこの区別は明確ではないようです。


考えられる解決策:

フォルダのinode番号を確認できることがわかりました。256これはサブボリュームであることを意味します。 (参考資料12サム)


それでは、inode = 256を使用することがディレクトリとサブボリュームを区別するための最良の経験的方法ですか? (一部のデフォルトファイルシステムでは、inode = 256の別の理由がある可能性があると仮定しています。したがって、確実に確認するには、問題のディレクトリがbtrfsファイルシステムの一部であることを確認する必要があります。)

別の方法おそらく、コマンドを渡してbtrfs subversion list .出力を解析することです。mount | grep /\btrfsディスク、ディスク、およびパーティションのルートマウント(適切な場合)を処理するには、このエントリまたは同様のエントリを追加する必要があります。


未来: 新しいオプションがあればいいと思います。lsこれにより、ソフトリンクの表示方法に似た形式でサブボリュームとマウントポイントに関する情報が提供されます。

$ ls --show-mounts
/ <-- mounted from /dev/sdc
.snapshots <-- subvolume of /
shapshot <-- subvolume of .snapshots mounted to it's folder /2

背景:

  • ディレクトリとサブボリュームは非常に異なって管理されます。

  • rmdirサブボリュームは使用または削除できませんrm -rf。必ず使用してくださいbtrfs subvolume delete

  • 特定のサブボリュームにないと、ディレクトリまたはファイルをハードリンクできません。

  • サブボリュームは自動的にマウントされているように見えますが、別のマウントポイントに手動でマウントすることもできます。

  • 使用する場合ドミまたは、実際にはサブボリュームまたは少なくとも特殊なタイプのサブボリュームであるスナップショットを撮ります。

    例えば、ルートツリーは次のとおりです。

    /  
    /.snapshots  
    /.snapshots/1  
    /.snapshots/1/snapshot  
    /.snapshots/2  
    /.snapshots/2/snapshot  
    ...
    

    ここにのみ、および/1通常/2のディレクトリがあり、、、およびbtrfsサブボリュームのようです。//.snapshots/snapshot

ベストアンサー1

btrfs subvolume show /directory/in/question

sudoサブボリュームの場合、コマンドは成功し、それ以外の場合は失敗します。出力を終了状態にリダイレクトし、/dev/null終了状態にのみ依存できます。

これにより、ディレクトリツリーで利用可能なすべてのディレクトリがテストされます。

sudo find / -type d -exec sh -c '
   for d do
      btrfs subvolume show "$d" >/dev/null 2>&1 && printf "%s\n" "$d"
   done' find-sh {} +

疑わしいパスを除外することもできます。次のコードは/proc、、/sysおよび/dev:を除外します。

sudo find / -type d \( \
     \( -path /proc -prune \) -o \
     \( -path /sys -prune \) -o \
     \( -path /dev -prune \) -o \
     \( -exec sh -c '
        for d do
           btrfs subvolume show "$d" >/dev/null 2>&1 && printf "%s\n" "$d"
        done
     ' find-sh {} + \) \)

関連:ディレクトリ/ファイルがあるサブボリュームを確認するには?

おすすめ記事