バックアップ計画の改善の一環として、回転する外付けハードドライブを追加し、1つは常に安全にオフサイトにあり、もう1つはバックアップデータを受信できるようになりました。もちろん、バックアップが実際に完了したことを確認するために、バックアップはスケジュールに従ってスクリプトで作成され実行されます。
私の計画は、ハードドライブを手動で挿入してマウントし、マウントを解除する必要があるまで(もう一度手動で)そのままにしてから取り外し、次のドライブをインポートしてから、そのドライブを手動でマウントすることです。どちらのドライブも、たとえば/mnt/backupにマウントされます。
問題は次のとおりです。ハードドライブを接続またはマウントするのを忘れた場合は、バックアップスクリプトを実行したくありません。したがって、スクリプトの実行を許可する前に、/mnt/backupにマウントされたデバイスがあるかどうかを検出できる必要があります。私の最初の考えは、「NO_DRIVE_MOUNTED」というファイルを(アンマウントされた)/ mnt / backupディレクトリに置き、それが正しく機能することを確認することでした。いいえバックアップルーチンを実行する前に存在しますが、ハッキングされた感じがします。 (もう一度「BACKUP_DEVICE_READY」というファイルをそれぞれの外部ハードに入れて、逆のファイルがあるかどうかを確認してください。する存在自体がハッキングのように感じられる。 )
デバイスが特定のディレクトリにマウントされているかどうかを検出するより良い方法はありますか?私の経験によれば、Linuxでドライブを接続すると、次の利用可能な/dev/sdXに割り当てられるので、デバイス自体をチェックするのを避けたいと思います。したがって、次回のバックアップドライブは/ dev / sdfになることがあります。バックアップドライブを接続して別のドライブを挿入すると、/dev/sdgになります。これは、/dev/sdfテストが失敗することを意味します。また、ドライブをより簡単かつ透明に交換/アップグレードできるように、デバイス固有の識別(UUIDなど)を避けたいと思います。
これはUbuntu 10.10(またはサーバー全体の再構築中に十分に遅れると11.04かもしれません)にあり、理想的にはバックアップの前にThe command is direct in myを付けることができる簡単な1行テストが必要です。 crontab(しかし、必要に応じてBashスクリプトを恐れません)。
答え1
cronなどのバックアップスクリプトを実行できます
fgrep -q /mnt/backup /proc/mounts && backup.sh
ただし、失敗した試みを記録するには、スクリプトにテストを追加することをお勧めします。
答え2
/mnt/backup
マウントポイントであることを確認するには2つの方法があります。/proc/mounts
Linuxをターゲットとするこの方法は、他のdf
すべてのUnixシステムに移植可能なので、どちらかを選択する大きな理由はありません。マウントポイントにスペースが含まれている特殊なケースでは、両方が失敗する可能性があります(ただし…しないでください)。
case $(df -P /var) in *" /var") echo mounted;; esac
if fgrep -q " /tmp " </proc/mounts; then echo mounted; fi
デバイスのシリアル番号、ファイルシステムのUUID、またはファイルシステムのラベル(後者が信頼できる指標になる可能性があります)などの基準に基づいて、特定のリムーバブルドライブに特定のデバイス名を割り当てることができます。必要なのは、udev設定で1行だけです。しかし、これは適切なマウントポイントに便利に取り付けることができるという点で良い考えですが、デバイスの存在に依存することはお勧めできません。デバイスが存在するがマウントされない可能性があるため、スクリプトがインストールされているデバイスによって異なる場合は確認する必要があります。設置の様子。
答え3
必要なものを達成する別の(より良い?より安全な?)方法があります。バックアップドライブがマウントされていることを確認するのではなく、電源を接続してから実際に使用していない場合は、マウントを解除してください。
これにより、ディスク(一部のディスクは残り)に適しており、誤ってアクセスできなくなります。 cronジョブはmount
起動時に実行され、umount
完了時に実行できます。の項目で目的を説明する場合は、mount /mnt/backup
通常のユーザーとしてコマンドを使用してこれを実行できます。一般ユーザーとしてインストールが完了したら、このトピックにこのオプションを含める必要があります。ディスクが実際に挿入されたかどうかを検出するだけです。このコマンドは、接続されていないディスクをマウントしようとするとエラー32が原因で失敗することを示します(このエラーの他の原因があります)。umount /mnt/backup
/etc/fstab
users
mount
最後の部分は、/etc/fstabにタスクの実行方法を教えることです。ご存知のように、デバイス名は常に変更されるため、信頼できません。ただし、実際のデバイスは独自に認識できます。ハードディスクの場合、パーティションには、blkid
などの適切なツールを使用して決定できる名前がありますvol_id
。このコマンドはblkid
通常のユーザー呼び出し用です/sbin/blkid
(BTW、これはDVDにも適用されます)。
たとえば、現在デバイスに2つのパーティションがあるディスクがあります/dev/sdc
。スーパーユーザーとして呼び出して、最初のパーティションの「UUID」を取得します。
$ /sbin/blkid /dev/sdc1
/dev/sdc1: UUID="7aeb2d15-9a1b-410a-b5ed-5437e68cb528" SEC_TYPE="ext2" TYPE="ext3"
/etc/fstab
それから行に追加しました。
UUID="7aeb2d15-9a1b-410a-b5ed-5437e68cb528" /mnt/backup ext3 users,noauto,rw,relatime,data=ordered
(使用可能な場合)正しいパーティションをインストールするための/etc/fstab
正しい情報を提供してください。同じだ。mount /mnt/backup
/mnt/backup
umount
残念ながら、この方法はバックアップDVDがある場合にのみ機能します。その理由は、コマンドがmount /mnt/backup
最初のエントリをマウントポイントとして使用するためです。接続しているディスクと一致しない場合は、同じマウントポイントで操作を実行するために別のディスクを使用できる追加のエントリが見つからずに失敗します(理由を知りたい)。/etc/fstab
/mnt/backup
回避策は、/mnt/backup
すべてのバックアップディスクをのマウントポイントに関連付けることです/etc/fstab
。スクリプト(通常のユーザーモードでも)は、ディスク(パーティション)のUIDをmount -U 'xxxxxxx'
使用して各バックアップディスクパーティションを識別してマウントしようとします。バックアップディスクの1つを挿入すると、スクリプトは最終的に成功します。xxxxxxx
/etc/fstab
これはまた、バックアップディスクと勘違いして、ディスクが誤って破損するのを防ぎます。スクリプトが認識しないディスクを挿入すると、そのディスクが/etc/fstab
。
もう一度試したことがないもう1つ(より簡単な)確認方法は、mount -a -O my_option
アイテムにオプションを含むすべてのディスクをマウントするコマンドを使用することです。もちろん、バックアップディスクのすべてのエントリに対応するオプションを追加する必要があります。これに対するリスクは、2つのバックアップディスクが接続されている場合はそのディスクを含めることができることです。上部から2番目のディスクのみが表示されるため、これは問題ではありません。しかし、結局のところ、両方を分離するためにどれだけ気をつけなければならないのかわかりません。いくつかの実験が必要な場合があります。/etc/fstab
'my_option'
/etc/fstab
/mnt/backup
しかしmount -a -O my_option
、。/etc/fstab
もう一度その理由が気になりました。
答え4
実際、そのインストールディレクトリへの書き込みを防ぐ方法を見つけました。 /mnt/バックアップ
- インストールされていない場合は、「chmod ugo -w /mnt/backup」を使用してください。
ディレクトリマウント
- "chmod ugo+w /mnt/バックアップ"
アンマウントされたディレクトリに書き込もうとすると、権限拒否メッセージが表示されます。
touch-equality-touch: 'equality' をタッチできません: 権限が拒否されました。