元の質問
だから新しいBTRFSプールのサブボリュームを/home
。運命に任せてコレクションを作り直しました。
後で組み込まれた「Baobob」ディスク使用ユーティリティを実行しました。/mnt/wd
予想よりも多くを明らかにします。もう少し注意深く見ました。 (/mnt/wd/home/$USER/multimedia
移動後に置いたファイルではありません)「失われた」ファイルはすべて残ります(BTRFSシステムのルートディレクトリにはラベルがあります)。~/multimedia
wd
振り返ると、~/multimedia
古いファイルは消えましたが、新しいファイルはまだ残ります。
ファイル間の共通点の喪失
最初に失われたファイルには1つの共通点があります。新しいドライブにコピーする前に、欠落していないファイルはとしてインストールされたext4
パーティションにありました/home
。すべての操作は、としてインストールされたntfs
古いドライブのパーティションで行われ、/media/$USER/data
シンボリックリンクはを指します/home/$USER
。デュアルブートに対応するためのものでしたが、使用を中止しました。すべてを新しいボリュームにコピーする場合(rsync
関連する場合は使用)、すべてのファイルを分割してシンボリックリンクを作成する代わりにサブボリュームに入れます(両方のディレクトリが完了したら、あるディレクトリの内容をmv
別のディレクトリにコピーしました)。rsync
私はこの結果を決定する前にサブディレクトリに少し触れましたが、結局私が見つけることができる最高のディレクトリを得ました。/home
これは新しいサブボリュームです。その後、/home
ソースパーティションと一致するビューが表示され、マージされたバージョンと一致するビューが表示さ/home
れます。/mnt/wd/home
初期構成/状態
fstab
現在私の状態は次のとおりです。
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/nvme0n1p5 during installation
UUID=699ad207-3b40-4caa-9926-503830121327 / ext4 errors=remount-ro 0 1
# BTRFS pool
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /home btrfs defaults,autodefrag,subvol=home 0 2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /mnt/app_drive btrfs defaults,autodefrag,subvol=applications 0 2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /mnt/snapshots btrfs defaults,autodefrag,subvol=snapshots 0 2
# Swap file
/swapfile1 none swap sw 0 0
/mnt/wd
また、BTRFSボリュームのルートディレクトリもマウントしましたsudo mount UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /mnt/wd
。
sudo btrfs subvolume list .
すべてのサブボリューム(またはルート)のインストール場所で実行します。
ID 638 gen 4492 top level 5 path home
ID 639 gen 4433 top level 5 path applications
ID 640 gen 4404 top level 5 path snapshots
ID 800 gen 4402 top level 640 path snapshots/home_2017-07-06
ただしls ./$USER/multimedia
(およびその他の欠落ディレクトリ)は、で/home
実行中または実行中に全く異なる内容を表示します/mnt/wd/home
。
qwertystop@dt /home $ ls $USER/multimedia
pics unprepared
qwertystop@dt /home $ cd /mnt/wd/home
qwertystop@dt /mnt/wd/home $ ls $USER/multimedia
3d ml_resource music osu! phone-ready pics Unprepared vids
ここで何が起こっているのか、それとも2つを調整する方法を知っている人はいますか?アイデアは、あるファイルから別のファイルにすべてをコピーすることです。ただし、これはまだ可能な限り最善の方法ですべての新しいファイルに対してこれを行う必要があることを意味します。
さらなる実験
スナップ写真
スナップショットを作成しようとしています。スナップショットの作成にどのマウントポイントを使用しても、どこに配置しても、常に試したバージョンではなく、見つかったバージョンと/mnt/wd/home
一致します/home
。
sudo btrfs subvolume snapshot /home /home/snapshot
sudo btrfs subvolume snapshot /mnt/wd/home /mnt/snapshots/snapshot
sudo btrfs subvolume snapshot /home /mnt/snapshots/snapshot
彼らはすべて同じです。これは内部の一貫性に役立ちますが、ファイルにアクセスしようとしたときに矛盾が持続する理由はわかりません。
fstab
/インストール実験:
bootの後にBTRFSルートを使用する代わりに、fstabにBTRFSルートをマウントしようとしました/mnt/wd
(行が行の前に配置されています)。/home
mount
fstab
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/nvme0n1p5 during installation
UUID=699ad207-3b40-4caa-9926-503830121327 / ext4 errors=remount-ro 0 1
# BTRFS pool
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /mnt/wd btrfs defaults,autodefrag 0 2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /home btrfs defaults,autodefrag,subvol=home 0 2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /mnt/app_drive btrfs defaults,autodefrag,subvol=applications 0 2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /mnt/snapshots btrfs defaults,autodefrag,subvol=snapshots 0 2
# Swap file
/swapfile1 none swap sw 0 0
これは何の違いも生じませんでした。
頑張りましたいいえ/home
デフォルトのサブボリュームを完全にマウントしますfstab
(ラインコメント).その後、その行のコメントを削除してインストールしたとき、結果のインストール/home
ドライブは/mnt/wd
新しいファイルではなく古いファイルと一致しました。それでは、起動時に不安定になる可能性があると思いましたか?
「変更されていない」ファイルにはまだコメントの違いがあります。
ファイルシステムは、2つのバージョン間で別々に失われていないファイルを追跡し続けています。別に見てみると、tail .bash_history
違うことがわかりました。
マウントポイントとサブボリュームの組み合わせに問題がありますか?
代わりにhome
サブボリュームをマウントし、後で再試行しました。以前のバージョンと一致します。サブボリュームのスナップショットを作成し、名前を付けてからマウントしました。/mnt/foo
/foo
/home
home
newhome
/home
新しいバージョンと一致します(古いファイルが見つからず、新しいファイルが表示されます)。
新しいバージョンにのみ存在するディレクトリの1つに新しいファイルを追加しました(まだnewhome
)。再インストールhome
して/home
再起動しました。ファイルがありません。再利用に変更しても、newhome
ファイルはまだ存在します。別の順序で同じことを行い(バージョンに入れて確認home
しnewhome
)、ファイルを別のディレクトリに入れます。結果は同じです。ファイルはそのファイルを含むサブボリュームにのみ存在し、最新バージョンにのみ存在します(インストールされている場合にのみ対応しますが、バージョンによって/home
異なります)。これは/home
、「マウントポイントにマウントされたサブボリューム」が何らかの理由で実際にマウントされたサブボリュームとは異なるものとして扱われるという最近の考えを排除します。
無関係なサブボリュームをインポートし、私のユーザー名のサブディレクトリを追加してからマウントしました/home
。その結果、OSはまだ私のユーザー名/パスワードを認識していましたが、新しいユーザーであるかのように、そのボリュームとディレクトリにあるすべての構成ファイルを再生成しました。それいいえパーティションの「新しいバージョン」を使用してください/home
。
これで状況を整理できそうです。これは問題の解決や原因の特定には役立ちません。
長すぎます。
「home」というサブボリュームと派生したスナップショットは、実際には2つのサブボリュームです。そのうちの1つはマウントされている場合にのみ表示され、/home
もう1つは別の場所にマウントされている場合、またはBTRFSデバイスのルートボリュームプールのサブディレクトリとして表示されている場合にのみ表示されます。未知の理由から、2つのバージョンが最初にインストールされる直前のある時点で分岐したため、インストールされたバージョンには/home
-ed/home
で上書きされた古いパーティションの内容が含まれていますが、他のバージョンにインストールされているバージョンはその場所のバージョンです。初期化後にファイルシステムを変更したため、ファイルシステムが含まれています(他のパーティションへの複数のシンボリックリンクを以前にリンクされたファイルに置き換えます)。/home
rsync
rsync
なぜこれが必要なのかわかりません。 「home」から派生していないサブボリュームがマウントされ、「home」のファイルがコピーされない場合、これは発生しないことを確認できます/home
。ファイルの小さな部分を新しいサブボリュームにコピーすると、これが発生することを確認できます。それでは、スナップショットを撮るのではなく、すべてのファイルコピーをテストしてみましょうcp
。
これはうまく機能しますが、問題を指摘するのは難しい部分があります。新しいプライマリサブボリュームcp -a --reflink=always ./*
から起動しようとすると、/home/qwertystop
各ファイルに対して「クロスデバイスリンクが無効です」というエラーメッセージが表示されます。に関連する同じコマンドを実行すると、これは発生しません/mnt/wd/home/qwertystop
。問題は、あるマウント位置を別のマウント位置と別のデバイスに読み取るコンピュータによって引き起こされるか、または関連しているようです。私はこれが技術的に可能だと思います。これは、3 つの異なるデバイスで構成される BTRFS プールです。
レプリケートされたバージョンに切り替えたとき、最初は機能しているように見えましたが、少し試して/mnt/wd/home
みると、新しいサブボリュームに表示される重複エントリが以前のサブボリュームのものと同じであることがわかりました。
答え1
私はこの問題に対処しましたが、これがなぜ問題なのか、元の不一致がどこから来たのかに関する質問ではありません。
ホームディレクトリを新しいサブボリュームにコピーしますが、/home/.ecryptfsはコピーしないとコピーは停止します。したがって、重複は.ecryptfsによって発生したようです。これがバグなのか、それとも私が知らないシステムの予想される動作なのかは不明です。
システムにインストールされている暗号化を無効にしました。
ecryptfs はスタックファイルシステムです。ログイン時に、つまりユーザーがデータを暗号化するために使用するパスワードを入力するときにインストールできます。 (または)は、findmnt
にインストールされているmount
ファイルシステムの種類を表示します。作成されたファイルはecryptfsで暗号化され、どこかに保存されます(btrfsなど)。これはecryptfs設定の1つにすぎません。これを構成する他の方法があります。ecryptfs
/home/$USER
/home/$USER/
/home/.ecryptfs/$USER/
私はそれを使用したことがないので、上記の説明に従わないでください。ここではコミュニティ提供のドキュメントを見つけることができます。
https://help.ubuntu.com/community/EncryptedHome#Encrypted_Home
これは、マウントされたbtrfsボリュームを使用してログインし、ホームディレクトリを調べると、にマウントされた/home
ときに同じbtrfsボリュームのディレクトリ/home/$USER
に表示されるものと比較して他のいくつかのファイルが表示される理由を説明します。$USER/
/mnt
「クロスデバイスリンクが無効です。」 /mnt/wd/home/qwertystop に関連する同じコマンドを実行すると、この問題は発生しません。問題は、あるマウント位置を別のマウント位置と別のデバイスに読み取るコンピュータによって引き起こされるか、または関連しているようです。
残念ながら、「機器間の接続」は間違った名前です。これは実際にファイルシステム間のリンクです。 btrfsファイルシステムからecryptfsファイルシステムにファイルをハードリンクまたは参照リンクすることはできません。その逆も同様です。
スナップショットを作成しようとしています。スナップショットの作成にどのマウントポイントを使用しても、どこに配置しても、常に/mnt/wd/homeのバージョンと一致します。
今、これがどのように起こるのかを見ることができるはずです。
警告:ログインしてecryptfsがインストールされている間にスナップショットを復元したり、バックアップストアを操作したりすることは非常に懸念されています。代わりに、rootユーザーを有効にしたり、暗号化されていないホームディレクトリを持つ特別な管理者ユーザーアカウントを作成したり、/homeスナップショットを復元する必要がある場合は、そのアカウントを使用できます。
答え2
私はこの問題に対処しましたが、これがなぜ問題なのか、元の不一致がどこから来たのかに関する質問ではありません。
ホームディレクトリを新しいサブボリュームにコピーしても何も複製しない場合、/home/.ecryptfs
複製は停止します。だから重複は何かによって発生したようです.ecryptfs
。これがバグなのか、それとも私が知らないシステムの予想される動作なのかは不明です。