安全地移除已安装的驱动器

我有一个应用程序,通过SATA接口将文件写入格式化为NTFS的外部驱动器。

在closures应用程序之前,我确保使用FlushFileBuffers为每个文件(即CreateFileFlushFileBuffersCloseHandle )刷新所有内容。 然后我卸下驱动器,没有先卸载它!

将驱动器插入PC机时似乎工作正常。 但是,将其插入OS X时,操作系统似乎找不到任何文件,除非该驱动器已正确卸载。

有什么可以从磁盘丢失导致OS X找不到任何东西,有没有办法,我可以刷新数据,而无需卸载驱动器?

编辑:

与exfat我有问题,“脏”的驱动器重新安装时不可写入。

Solutions Collecting From Web of "安全地移除已安装的驱动器"

你可能想阅读这个Ronag,这可能会帮助你:

http://www.yourdailymac.net/2011/06/how-to-read-and-write-ntfs-harddrives-under-mac-os-x/

片段…

您可能已经知道,在Mac OS X下默认情况下,无法读取使用NTFS文件结构格式化的Windows驱动器。在OS X中实现的驱动程序根本无法写入NTFS格式的驱动器,可能这与商业利益有关。 但是,对于想要从Windows NTFS驱动器交换文件的用户而言,这是非常烦人的。 这就是为什么一些商业应用程序开发,但其中大部分花费金钱像Paragon NTFS的Mac,但也有一个免费的,甚至更好的解决方案。

编辑 – 我读过以下内容,这可能有助于重新安装NTFS驱动器等 – 我不得不承认,只能使用MAC一次又一次。 – 希望我没有跑错方向为你… … –

这是我在苹果论坛上发现的帖子 –

我已经创建了一个脚本来初始化NTFS HDisks,并在写模式下使用它们,只需使用本机OSX驱动程序,而不需要第三方软件。 这似乎也在小牛下工作。 你可以从下载:

http://sourceforge.net/projects/native-ntfs-osx/files/

你只需要为每个新的NTFS磁盘运行一次。 下一次插入一个已经用我的脚本初始化的NTFS磁盘时,磁盘将自动挂载(但是,它不会显示在桌面上,您将不得不从/卷中打开它)。

由于NTFS包含一个标志来注意磁盘是否被安全地移除,不允许用本地OSX驱动程序(在Linux下类似的情况下)将其挂载到写入模式,所以HD被安全地移除也是非常重要的。 如果发生这种情况,你只需要把它插入一个Wi​​ndows PC,并安全地删除高清(所以它清除该标志)。

并供您参考bash脚本 –

 #!/bin/bash checkExisting(){ echo "Checking if already existing device on file..." while read fileLine; do if [ "$line" = "$fileLine" ]; then echo "[WARNING] Device already initialized on this system. Nothing to do here" open "$FILENAME" exit 0; fi done < /etc/fstab } addLine(){ uuid=$(diskutil info "$FILENAME" | grep UUID | cut -d ':' -f2 | tr -d ' ') volumeName=$(diskutil info "$FILENAME" | grep "Volume Name" | cut -d ':' -f2 | tr -d ' ') if [ "$uuid" = "" ]; then line="LABEL=$volumeName none ntfs rw,auto,nobrowse"; else line="UUID=$uuid none ntfs rw,auto,nobrowse"; fi checkExisting; echo "# New NTFS HD: $volumeName on $(date) " >> /etc/fstab echo $line >> /etc/fstab device=$(diskutil info "$FILENAME" | grep "Device Node" | cut -d ':' -f2 | tr -d ' ') diskutil unmount "$FILENAME" diskutil mount $device open $FILENAME; exit 0; } checkDisk(){ filetype=$(diskutil info "$FILENAME" | grep "Type (Bundle):" | cut -d ':' -f2 | tr -d ' ') #echo $filetype if [ "$filetype" = "ntfs" ]; then addLine; fi if [ "$filetype" = "" ]; then echo "Error. Please, select a NTFS device" fi } #Check sudo if [[ $(/usr/bin/id -u) -ne 0 ]]; then echo "This script should be run as ROOT. Try sudo" exit fi echo "___________________________________" echo "RubeniumTB. 2013 --ruben80(at)gmail.com--" echo "" echo "Initialize a NTFS Hard Disk on this system to read and write" echo "Next time you won't need to initialize it again. Just plug and open but" echo "take into account that:" echo "" echo "* Configured disks will not be auto-opened!!" echo "* You will need to open /Volumes and click on your disk!!" echo "" echo "* Although it should not happen anything wrong, use at your own risk" echo "" echo "* IMPORTANT!!. Be sure that the NTFS device has been safely removed or it won't" echo "be mounted in write mode. In this case you can connect it again to any windows PC," echo "remove safely, and then connect to your MAC" echo "" echo "* Also IMPORTANT!!. To avoid problems use SHORT names for the Volume names, " echo "NO SPACES, and preferably only letters/numbers. Of course no special characters!!" echo "" echo "Now you are ready...." echo "SELECT a NTFS Disk to initialize on this system" echo "Write quit to exit" echo "" select FILENAME in "/Volumes"/* do case "$FILENAME" in "$QUIT") echo "Exiting." break ;; *) echo "You picked "$FILENAME" " checkDisk; ;; esac done