ポピーでタイムマシンを集中的に使用し、本当に便利になったいくつかの状況の後(バックアップからシステムをインストールする必要があり、問題が発生した後に問題をロールバックする必要があった場合)、この便利なシステムがLinuxにない理由が考えられました。 質問を調査し、使い慣れたLinuxユーザーに質問した結果、次のことが判明しました。 
      
        
        
        
      
      1.数分で膝の上にそのようなシステムを作ることができます 
      
        
        
        
      
      2.奇妙ですが、どういうわけか、実際にこんなに早く育てることができることを誰も知りません。 
      
        
        
        
      
      3. Linux用のタイムマシンには、麻雀と芸者が使用されます。 
      
        
        
        
      
    
      
        
        
        
      
    
      
        
        
        
      
     不要な第1世代のappletvがあり、そこからログを収集したり補助的な目的のために、ハード化されたLinux上に小さなサーバーを作成することにしました。 強化されたgentooをインストールした後、ディスク全体がすぐに移動するようにバックアップする方法の問題が発生しました-完全に障害が発生した場合、新しいディスクまたは完全に新しいappletvにバックアップをロールバックすることができます(もちろん、後で見つけたら)単に特定の日付を参照している失われたファイル。 
      
        
        
        
      
    
      
        
        
        
      
     タイムマシンはどのように機能しますか? 簡単に言うと、最初のシステムキャストは、Backups.backupdb / hostname / YYYY-MM-dd-hhmmssのすべての属性を持つファイルとして単純にコピーされ、最後のキャストを示す最新のシンボリックリンクが作成されます。 すでに2回目のキャストでは、次のことが発生します。ファイルの日付が比較され、ファイルの新しいコピーではなくファイルが変更されていない場合は、前のキャストのファイルにハードリンクが作成されます。 ファイルの変更がない場合、新しいキャスト全体が以前のキャストを完全に参照します。 ヌルは、新規/変更/削除されたファイルでのみ異なります。 その結果、キャスト(YYYY-MM-dd-hhmmssのようなディレクトリ)を削除するだけで、何も壊れません。 最も近い関連付けは、c ++のスマートポインターです。たとえば、(すべてのキャストからの)ファイルへの最後のリンクがなくなると、ディスクから削除されます。 
      
        
        
        
      
    
      
        
        
        
      
     以前のファイルの表示、復元、古いバックアップの削除などの観点から非常に便利なシステム キャストからシステム全体を復元するまで。 
      
        
        
        
      
    
      
        
        
        
      
     私が知っているすべてのLinuxバックアップシステムを調査した後、それらは少し異なるものとして廃棄されました。 しかし、1行でrsyncを使用した簡単なソリューションがありました。 
      
        
        
        
      
    
      
        
        
        
      
      rsyncには素晴らしいオプション--link-destがあり、以前のスナップショットやハードリンクの作成と比較して上記のすべてのロジックを実行します。  -xオプションは、/ proc / sys / devなどのマウントされたすべてのファイルシステムを除外します。  --deleteは、失われたファイルを削除します。 
      
        
        
        
      
    
      
        
        
        
      
     タイムマシン全体は、次のような1つのスクリプトになります。 
      
        
        
        
      
    
      
        
        
        
      
      #!/ bin / sh 
      
        
        
        
      
      date = `date" +%Y-%m-%d-%H%M%S "` 
      
        
        
        
      
      Src = / 
      
        
        
        
      
      DST = / mnt / backup-hdd / Backups.backupdb / atv 
      
        
        
        
      
    
      
        
        
        
      
      rsync -ax \ 
      
        
        
        
      
      -削除\ 
      
        
        
        
      
      --link-dest = .. /最新\ 
      
        
        
        
      
      $ SRC $ DST /処理-$ date \ 
      
        
        
        
      
      && cd $ DST \ 
      
        
        
        
      
      && mv Processing- $ date $ date \ 
      
        
        
        
      
      && rm -f最新\ 
      
        
        
        
      
      && ln -s $ date最新 
      
        
        
        
      
    
      
        
        
        
      
     スクリプトを/etc/cron.hourlyにコピーすると、タイムマシンのようなバックアップができます。 
      
        
        
        
      
     システムがクラッシュした場合、USBフラッシュドライブから起動し、パーティションをフォーマットし、同じrsyncを反対方向に実行し、再起動またはchrootすると、システムが再び動作します。 
      
        
        
        
      
    
      
        
        
        
      
     また、/ etc / cron.dailyには、前日の1時間ごとのキャストを削除し、最後の日だけ24を残してから、前の月の毎日のキャストを削除する単純なスクリプトを配置します。 
      
        
        
        
      
    
      
        
        
        
      
     ネットワーク経由でバックアップサーバーにバックアップをアップロードしますか? どうぞ。  sshキーを使用して自動認証を行い、スクリプトをサイレントに変更します。 
      
        
        
        
      
    
      
        
        
        
      
      #!/ bin / sh 
      
        
        
        
      
      date = `date" +%Y-%m-%d-%H%M%S "` 
      
        
        
        
      
      Src = / 
      
        
        
        
      
      DST = / mnt / backup-server-hdd / Backups.backupdb / atv 
      
        
        
        
      
    
      
        
        
        
      
      rsync -axz \ 
      
        
        
        
      
      -削除\ 
      
        
        
        
      
      --link-dest = .. /最新\ 
      
        
        
        
      
      $ SRC backup-user@company.com:$ DST / Processing- $ date \ 
      
        
        
        
      
      && ssh backup-user@company.com \ 
      
        
        
        
      
      「CD $ DST \ 
      
        
        
        
      
      && mv Processing- $ date $ date \ 
      
        
        
        
      
      && rm -f最新» 
      
        
        
        
      
      && ln -s $ date Latest " 
      
        
        
        
      
    
      
        
        
        
      
      AppleTVで3 GBシステムをテストし、サーバー上の最後のスナップショットと約5分で比較します-サーバーはリモート-ローカルネットワークではなく、接続は約1.5 MB /秒でした。 圧縮に「-z」を追加しました。 悪くはありませんが、成長した場合は、1時間ごとではなく、広い範囲で行うことができます。  rsyncはネットワーク経由で「owner:group」ファイルを送信しないように見えることに注意してください-backup-user @はユーザーを使用するため、すべてのファイル属性をテキストファイルにダンプしてバックアップに入れることができます。 
      
        
        
        
      
    
      
        
        
        
      
      Macユーザーにはないもの 
      
        
        
        
      
      1. cronを使用した柔軟な構成。 
      
        
        
        
      
      2.オプション--exclude = PATTERN /-exclude-from = FILEを使用すると、フォルダーを指定するだけでなく、より柔軟な除外ルールを指定できます。 たとえば、タイムマシンがポピーの.oファイルのすべてをバックアップすることは非常に不幸です-プロジェクトのコンパイルは数ギガバイトのobjファイルに簡単に広がり、バックアップからプロジェクトフォルダーを除外したくありません。 
      
        
        
        
      
      3.必要に応じて、データベースをロックするためのロジックを追加するのは簡単です 
      
        
        
        
      
      4.また、印象に加えて、変更されたファイルのみに対応する印象を作成するのも簡単です。どのファイルが変更されたかを後で簡単に監視できます。 ハードリンクは多くのスペースを占有しないため。 
      
        
        
        
      
      5.必要なものを追加します。まだLinuxが手元にあります;) 
      
        
        
        
      
    
      
        
        
        
      
     更新:おそらく、使用可能なパッケージ/システムを見たときに頭にあったバックアップシステムの要件のリストを追加します。 
      
        
        
        
      
      1.使いやすさ(rsync:1つのコマンドのみ) 
      
        
        
        
      
      2.可用性(おそらくすべてのlivecdにrsyncがあります) 
      
        
        
        
      
      3.依存関係(ディスクがクラッシュした場合、livecdから起動しましたが、依存関係のあるパッケージをどこかにインストールする必要がありますか?) 
      
        
        
        
      
      4.構成ファイルの不足またはその最小(または、バックアップに手を携えて構成を最初に探しますか?)