Ubuntuおよびbtrfsに基づくフォールトトレラントシステム

オタクとして、私はまだシステムを常に実験する習慣があります:再構築、不安定なRCカーネルのインストール、実験的な更新ブランチの有効化。 多くの場合、私は頻繁にシステムを壊します(私の個人的な記録、再インストールせずに2週間)。

壊れることとはどういう意味ですか? たとえば、頻繁にクラッシュするLibreOfficeやCompizがハングするのが非常に悪いなど、何かが非常に悪い場合、システムを再構成しようとしますが、それは長くて退屈です。

実際、私は何につながっていますか。

私のような人がシステムを実験するのが好きで、毎回それを復元するのにうんざりしているなら、私はこの問題を自分で解決したので、私のためのオプションがあります。 猫の下を歩く。

ハウツーまたは別の自転車。

アイテム1:LiveCD


事後的に、ディスクは2つのパーティションに分割されていると仮定します:/ ext4でフォーマットされたブートと/ btrfsでフォーマットされた。
MBRのディスクにgrub 2と書き込まれます。
したがって、最初の段落:
個人的な習慣と考慮事項から、黒い画面を眺めたり、インターネットにアクセスしたり、コマンドを覚えたり書き留めたりすることなく、グラフィカルインターフェイスからシステムを復元する方がはるかに簡単です。 いいえ、コンソールは悪いとは思いません。コンソールは大好きですが、とにかく、GUIの方が快適です。

アクション1

このアイデアは新しいものではなく、ハブのどこかにあると認めていますが、リンクが見つからなかったため、この出版物のソースに謝罪します。
目的のLiveディストリビューションのイメージを/ブートフォルダーにコピーします。
sudo cp /media/timofey/boot/grub/ISO/Linux/Ubuntu/ubuntu-12.10-desktop-amd64.iso /boot/ubuntu-12.10-desktop-amd64.iso
/ bootが別のパーティションに移動されたのは、それが良いためではなく、理由がわからないため、grub 2の下からbtrfsに書き込まれたLiveCDがロードされないためです。
grub'aの更新時に画像が失われないように、デフォルトのgrub 2設定を修正します。
sudo nano /etc/grub.d/40_custom

そして、コメントの後に同様の何かを挿入します。
 menuentry "Ubuntu 12.10 amd64" { set isofile=/ubuntu-12.10-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noeject noprompt -- initrd (loop)/casper/initrd.lz } 


実際には、イメージと肖像で、構成されました(公式wiki ubuntu):
/ Grub2 / ISOBoot
「ほぼ」最も重要になったので、構成を再生成します。

sudo update-grub

これで、再起動後、シフトキーを押したまま、メインシステムの状態に関係なく、インターネットとグラフィカルインターフェイスを使用してミニシステムを起動できます。

アイテム2:写真


Linuxにかなり長い間慣れ親しんでいる人なら、少なくともbtrfsを聞いたことがあると思います。 btrfsを使用してパーティションにubuntuをインストールする場合、デフォルトでは非常に賢明です。サブパーティションメカニズムが使用され、2つのサブパーティションが作成されます。 しかし、今はそれについてではありません。 この注意をエンドユーザーに使用する方法は? とても簡単です。

少しの背景:
当初はrc.localを介してスクリプトを実行する予定でしたが、実行されず、毎日cronを介して実装され、後でrc.localを無効にし、cronのスナップショットを無効にしました。

スクリプトコード:

 #!/bin/bash #This script for autocreating snapshot on startup #Version 1.2.9 set -e DATA="$(date +%g%m%d%k%M%S)" VOLUME=/dev/sda1 [ ! -d "/tmp/$DATA/" ] && sudo mkdir "/tmp/$DATA/" mount $VOLUME "/tmp/$DATA/" && { [ ! -d "/tmp/$DATA/snapshots/" ] && sudo mkdir "/tmp/$DATA/snapshots/" mkdir "/tmp/$DATA/snapshots/$DATA/" && cd "/tmp/$DATA/" btrfs subvolume snapshot ./@ ."/snapshots/$DATA/@_${DATA}/" btrfs subvolume snapshot ./@home ."/snapshots/$DATA/@home_${DATA}/" [ ! -f ./snapshots/snapshots.log ] && touch ./snapshots/snapshots.log chmod 777 ./snapshots/snapshots.log echo on_startup_$(date +%X_%x) >> ./snapshots/snapshots.log umount -l "/tmp/$DATA/" && sudo rmdir "/tmp/$DATA/" } 


/ etc / btrfs_snapshot_onstartupにあります
/etc/rc.localに追加し、sudo chmod + x 'file path'を介して両方のファイルに実行権限を付与します
./snapshots/snapshots.logファイルへの実行ログが機能しない可能性があるため、ルート権限で手動で作成する必要があります。 再起動後、彼自身が必要な権利を受け取ります。

次のように入力して、システムスナップショットのステータスをいつでも表示できます。
cat /var/log/snapshots.log

すべてのイメージは、スナップショットフォルダーのシステムセクションに追加され、システムが正常に起動されるたびにフォルダーが作成されます。
一部の人は、それが成果を上げず、起動時にスナップショットを作成すると言うかもしれません。 それとは程遠い、1日でシステムに多くの変更を加えて100回再起動できることを正当化し、別のケースでは、成功した(実際の)起動の瞬間に戻ることはできませんが、ほんの1日前です。

手動で開始するオプション:
 #!/bin/bash #This script for autocreating snapshot #Version 1.2.8 set -e DATA=$(date +%g%m%d%k%M%S) ################################## [ ! -d /tmp/$DATA/ ] && sudo mkdir /tmp/$DATA/ sudo mount /dev/sda2 /tmp/$DATA/ && { #################################################################### [ ! -d /tmp/$DATA/snapshots/ ] && mkdir /tmp/$DATA/snapshots/ mkdir /tmp/$DATA/snapshots/$DATA/ cd /tmp/$DATA/ sudo btrfs subvolume snapshot ./@ ./snapshots/$DATA/@_${DATA}/ sudo btrfs subvolume snapshot ./@home ./snapshots/$DATA/@home_${DATA}/ #################################################################### sudo chmod 777 ./snapshots/snapshots.log sudo echo this.hands_$(date +%X_%x) >> ./snapshots/snapshots.log sudo cat ./snapshots/snapshots.log sleep 1 sudo umount -l /tmp/$DATA/ && sudo rmdir /tmp/$DATA/ #################################################################### sudo btrfs filesystem df / #information about fs } read exit 0 


アイテム3:回復


それで、彼らが試みたために、彼らはシステムを殺しました、私はどうすればいいですか?
LiveCDから起動し、システムパーティションを便利なフォルダーにマウントします。
次に、必要に応じて、標準のサブウルフ@およびhomeを非表示または削除します。
不足しているスナップショットに置き換えます。
ほとんどの場合、@を置き換えるだけで十分です。
ナザルプ
また、スナップショットを使用すると、システムの特定の状態にロールバックできるだけでなく、必要なファイルまたは構成をそこから抽出することができます。


アイテム4:クリーニング


スナップショットは多くのスペースを消費しませんが、時間が経つにつれて、大量のゴミがディスクに蓄積される可能性があります。 これは、スナップショットでフォルダーを自動的にクリーニングするためのスクリプトです。 これにより、すべてのシステムスナップショットが削除されます。

 #!/bin/bash #Version 0.0.9 set -e DATA=$(date +%g%m%d%k%M%S) [ ! -d "/tmp/$DATA" ] && sudo mkdir "/tmp/$DATA" sudo mount /dev/sda1 "/tmp/$DATA" && { cd "/tmp/$DATA/snapshots/" for i in */* do sudo btrfs subvolume delete "$i" done for i in * do sudo rmdir -v "$i" done echo cleanup_$(date +%g%m%d%k%M%S) > "./snapshots.log" sudo cp "./snapshots.log" '/var/log/snapshots.log' sudo umount -l "/tmp/$DATA" && sudo rmdir "/tmp/$DATA" } read exit 0 


まとめ


比較的フォールトトレラントなシステムを作成しました。このシステムでは、障害が発生した後、システムを迅速に復元できます。 同時に、最小限の時間と労力で保護システムを構築します。

これについての私自身の考え

このようなソリューションは、大規模なIT構造では有用ではないと思いますが、小規模な家庭での使用には理想的です。

また、クリーンアップスクリプトを終了して、たとえば数週間以上経過したすべてのスナップショットをクリアし、使用可能なスナップショットすべてをクリアしないようにすることもできます。正直に試してみましたが、うまくいきませんでした。 次に、たとえばデフォルトでcronに駆動して1日に1回実行し、btrfsの公式インストールスクリプトに含めることもできますが、これはわずかな変更で、btrfsの標準機能に基づいたかなり普遍的なソリューションです。

はい、lvmは知っていますが、鉄からの抽象レイヤーを追加する必要はありません。また、別のセクションに写真を撮ることも一般的ではありません。

UPD 1:
バグの修正を手伝ってくれwarsoulkraleksandrのユーザーに感謝します。
UPD 2:
ユーザーnuitの利点は、起こりうるエラーを回避するためにスクリプトを修正しました。

Source: https://habr.com/ru/post/J160691/


All Articles