web-dev-qa-db-ja.com

(NTFS)ドライブがマウントされているかどうかを検出します。そうでない場合はマウントします

USBドライブを、起動時にマウントされていないNTFSパーティションにあるフォルダーと同期したい。私はそれを行うコマンドを見つけました:rsync -axu /media/USB/folder /home/user/folder。ただし、NTFSドライブはすでにマウントされている必要があります。

NTFSドライブがマウントされているかどうか、およびマウントされていないかどうかをスクリプトから検出するにはどうすればよいですか? Linux(Ubuntu)を使用しています。

これはあなたの助けを借りて変更された小さなスクリプトです(元は ここ です)!

#!/bin/bash
## CONFIG SECTION
MOUNT_DRIVE=/dev/disk/by-id/scsi-SATA_Hitachi_HTS5416_SB3404GRGJRKBS-part5
MOUNT_POINT=/media/Windows/
# Local folder to sync with
SYNC_LOC=/media/Windows/vasia/Disertatie/
# Device folder to sync with
SYNC_DEV=Disertatie
#
## SCRIPT SECTION
#verify if the drives are mounted
if mount | grep -q "/media/Windows/"; then
#device is mounted
echo "Windows NTFS Drive is mounted!"
else
#device is not mounted,let's mount it
mount $MOUNT_DRIVE $MOUNT_POINT
fi
# Wait for thumbdrive to settle
sleep 10
# Synchronize thumbdrive with local
rsync -axu /media/DISK_IMG/${SYNC_DEV}/ ${SYNC_LOC}/
# Synchronize local with thumbdrive
#rsync -axu ${SYNC_LOC}/ /media/disk/${SYNC_DEV}/
# Inform user that synchronization is complete.
zenity --title "Thumbdrive Sync" \
       --info --text "File synchronization        complete."
5
vasiauvi

あなたがそれを行う方法についてもう1つの解決策があります。 NTFSファイルシステムでファイルを作成してから、このファイルが存在するかどうかを確認できます。あなたの場合、他の解決策がおそらくより良いでしょう。ただし、NFSまたはSMBファイルシステムがマウントされているかどうかを確認する必要がある場合は、ファイルがマウントされているだけでなく、アクセスしやすいことを確認する必要があるため、ファイルを確認する方がよい場合があります。次に、次のようにします。

if [ ! -f /your/mounted/fs/mount-check.txt ];
then
    echo "Here you have to put your mount command."
fi
2

mountpointコマンドを使用します。

mountpoint -q $MOUNT_POINT || mount $DEVICE_WITH_NTFS_FILESYSTEM $MOUNT_POINT

後者の部分(||の後)は、最初の部分がfalseの場合(つまり、マウントポイントが存在しなかった場合)にのみ実行されます。

3
Juuso Ohtonen

特定のディレクトリがマウントポイントであるかどうかを確認する方法はたくさんあります。たとえば、(Linuxの場合)マウントポイントリストを確認します。

if ! </proc/mounts awk '$2 == "/mount/point" {exit(0)} END {exit(1)}'; then
  mount /mount/point
fi

または(移植可能)パスのファイルシステムのマウントポイントがそれ自体であるかどうかを確認する

if ! df -P /mount/point | grep -q '/mount/point$'; then
  mount /mount/point
fi

可能なマウントポイントがシンボリックリンクである可能性がある場合は、そのディレクトリがその親とは異なるファイルシステム上にあるかどうかを確認します。

if df -P /mount/point/. /mount/point/.. | {
      read -r _; read -r dev1 _; read -r dev2 _
      [ "$dev1" = "$dev2" ]
    }; then
  mount /mount/point
fi

別のアプローチは、 automounter を使用して、アクセス時にディレクトリを自動的にマウントすることです。たとえば、Linuxでは、 autofs :を使用できます。

  • /etc/auto.masterを読み取る/misc /etc/auto.miscの行のコメントを解除します
  • /etc/auto.miscに、windows_stuff -fstype=ntfs :/dev/sdz99を追加します(sdz99をマウントするパーティションに置き換えます)
  • シンボリックリンクを作成する/home/user/folder/misc/windows_stuff
  • /etc/init.d/autofs reload(またはautofsにディストリビューションに構成を再ロードするように指示するもの)を実行します。

プレーンなmountコマンドを発行することで、マウントされているものを確認できます。また、各マウントポイントの「ソースデバイス」も示します。

/dev/disk/by-id内のデバイスを使用してNTFSボリュームをマウントする場合、再起動とドライブ接続の間で変更される可能性がある/dev/sd*名とは対照的に、スクリプトで確認できる固定名があります。イベント。

したがって、このようなものは、bashにマウントされたドライブの存在を確認できます。

if mount | grep -q "/dev/disk/by-id/$DEVICE_WITH_NTFS_FILESYSTEM"; then
 # device is mounted
 ;; # do nothing
else
 # device is not mounted, let's mount it
 mount $DEVICE_WITH_NTFS_FILESYSTEM $MOUNT_POINT
 fi
2
LawrenceC