解決策 1:
Ubuntu でスナップショット ベースのアップグレードを試しました。ええ、私は何度か再起動する必要がありました.最初に元の root-lv の名前を別の名前に変更して、スナップショットに元の名前を付けることができます (アップグレードにより多くの変更が作成され、変更は元よりもスナップショットの方が高速であるため) ):
# lvrename lvm root root-old
# lvcreate -n root -s lvm/root-old -L 10G
サイズは適切に選択する必要があります。次に再起動すると、「新しい」lvm/ubuntu がルートとしてマウントされ、アップグレードを実行できるようになります。これで、新しいバージョンをテストしたり、古いシステムに変更したりすることができます
# lvrename lvm root root-new
# lvrename lvm root-old root
# reboot
アップグレードを中止したい場合は、(古いシステムから) 実行してください
# lvremove lvm/root-new
変更をコミットしたい場合は、(古いシステムから) 実行してください
# lvconvert --merge lvm/root-new
または、新しいシステムから
# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root
続いて再起動します。ボリュームが開いているため、システムはすぐにマージを拒否します。したがって、マージはブート中に開始され、システムで作業できる間は続行されます。
ところで、システムを切り替えるときは、適切なカーネルを使用することを忘れないでください。 /boot は lvm の一部ではないため、古いカーネルと新しいカーネルが並んで配置されます。
解決策 2:
OK、HOWTO 3.8 を読み直して理解できたと思います。
- 読み取り専用スナップショット (LVM1 など) には、スナップショット作成後のブロック レベルの違いが含まれます。元のスナップショットは変更されますが、スナップショットは元の表現を保持します。 から読む スナップショット その時点でのデータを提示します。
- 読み取り/書き込みスナップショット (LVM2 のデフォルト) に書き込むことができます:それらは フォーク です。 元のパーティションの。書き込み先 スナップショット オリジナルを変更しません。
スナップショットの仕組みは、オリジナルからのブロック レベルの一連の変更です。したがって、オリジナルが書き込まれると、次のことが起こります:
<オール>そのため、スナップショットを破棄しても、元のスナップショットにはまったく影響しません。元のスナップショットは変更されており、スナップショットにはそれらの変更のリストが含まれているだけだからです。
自分の質問に答える:
LVM で新しいスナップショットを作成します。スナップショット マウント ポイントに書き込むように更新を構成できる場合は、R/W スナップショットを使用します。それ以外の場合は、RO または R/W で十分です。
次に:
- R/W スナップショットに書き込む場合 マウント ポイント、コミット スナップショットをオリジナルに書き込み、元に戻す スナップショットを破棄します。
- オリジナルに書く場合 マウント ポイント、コミット スナップショットを破棄して元に戻す スナップショットからオリジナルに書き込む
このマージを実行するためのツールはまだ見つかっていません。また、私のシナリオがスナップショットの意図した用途ではないことを考えると、ツールがない可能性があります。 rdiff の仕事のようですね。
解決策 3:
Linux 2.6.33 以降を実行し、LVM 2.0.58 以降を使用している場合、LVM2 / デバイス マッパー スナップショットのマージ機能を利用できます。
lvconvert --merge
この投稿を参照してください:http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/
http://kernelnewbies.org/Linux_2_6_33 (セクション 5、MD/DM を参照) および 2.0.58 の LVM 変更ログを参照しています:ftp://sources.redhat.com/pub/lvm2/WHATS_NEW
しかし、それを適切に使用する方法はまだお伝えできません;-)
解決策 4:
LVM はブロック レベルで機能します。ファイルシステムが何であるかさえ「知りません」。そのため、別の LVM ボリュームのファイル システムがそこにマウントされていない限り、特定のディレクトリだけをスナップショットすることはできません。
LVM スナップショットを作成するとき、実際にはボリュームの「書き込み時コピー」複製を要求します。スナップショットが作成されたボリュームで変更されるブロックは、変更されずに最初にスナップショットに保存されます。したがって、「変更をコミット」するために何もする必要はありません。スナップショット ボリュームを削除するだけです。
そのようなシナリオでLVMを使用したことがないため、「変更を元に戻す」ための推奨される方法が何であるかはよくわかりませんが、LVMのドキュメントのどこかによく説明されていると思います。変更されたものはすべて再起動する必要がありますが、再起動することをお勧めします。
解決策 5:
<オール>lvconvert --merge <snapshot name>
スナップショットは、元の LV の状態を「フリーズ」します。スナップショットを削除すると、その状態が忘れられます。スナップショットをマージすると、その状態に戻ります
ただし、LVM 内部では、書き換えられたデータがスナップショットに保存されます。スナップショットのサイズが、LV とスナップショットで予想される変更量を満たすようにしてください