检测是否安装了 (NTFS) 驱动器。如果没有则安装它

检测是否安装了 (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."

答案1

有很多方法可以检查特定目录是否是挂载点,例如(在 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

另一种方法是使用自动安装器访问目录时自动挂载该目录。例如,在 Linux 上,您可以使用自动文件系统:

  • 取消注释/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您在您的发行版上重新加载其配置的命令)。

答案2

使用mountpoint命令:

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

||仅当第一部分为 false(即安装点不存在)时才执行后一部分(after )。

答案3

关于如何做到这一点还有另一种解决方案。您可以在NTFS文件系统中创建一个文件,然后检查该文件是否存在。对于您的情况,其他解决方案可能更好。但是,如果您需要检查 NFS 或 SMB 文件系统是否已挂载,有时最好检查文件,因为您希望确保它不仅已挂载,而且还可以访问。然后你会这样做:

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

答案4

您可以通过发出简单命令来检查安装的内容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

相关内容