2015-07-31 3 views
2

У меня есть приложение, которое записывает файлы на внешний диск, отформатированный как NTFS через интерфейс SATA.Безопасное удаление установленного диска

Перед закрытием приложения я убедиться, что все смывается с помощью FlushFileBuffers для каждого файла (т.е. CreateFile, FlushFileBuffers, CloseHandle). Затем я удаляю диск, не снимая его сначала!

Кажется, что это нормально работает при подключении дисковода к ПК. Однако при подключении к OS X ОС, похоже, не находит файлы, если только диск не был правильно отключен.

Что может быть отсутствовать на диске, что заставляет OS X ничего не находить и есть способ, который я могу очистить этими данными, не отсоединяя диск?

EDIT:

С EXFAT У меня есть проблемы с «грязным» дисководами не быть доступны для записи при повторном монтаже.

+0

Я заметил, что, если я отключу «обратной записью» кэш на дисках проблема уходит. Хотя мне кажется странным, что 'FlushFileBuffer' не очищает буферы обратной записи. – ronag

ответ

-1

Вы можете прочитать эту Ronag, это может помочь вам:

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

Отрывок ...

Вы уже могли бы знать, что это не возможно читать диски Windows, что форматируются файловой структурой NTFS по умолчанию в Mac OS X. Драйвер, который реализован в OS X, просто не способен записывать на диски с форматированием NTFS, вполне вероятно, что это имеет какое-то отношение к коммерческому интересу. Это, однако, очень неприятно для пользователя, который хочет обмениваться файлами с диска Windows NTFS. Вот почему было разработано несколько рекламных приложений, но большинство из них стоят денег, таких как Paragon NTFS для Mac, но есть также бесплатное и даже лучшее решение.

EDIT - я читал следующее: это может помочь в переустановке дисков NTFS и т. Д. - я вынужден допускать использование MAC только время от времени. - надеюсь, я не убегал в неправильном направлении для вас ....

Вот пост я нашел на яблоневых форумах -

я создал сценарий для инициализации NTFS HDisks и использование их в режиме записи, просто используя собственный драйвер OSX, без стороннего программного обеспечения). Кажется, он работает и под Mavericks. Вы можете скачать с:

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

Вам нужно только запустить один раз для каждого нового диска с файловой системой NTFS. В следующий раз, когда вы подключите диск ntfs, который уже был инициализирован моим скриптом, диск будет автоматически установлен (однако он не будет отображаться на рабочем столе, вам придется открыть его из/Объемы).

Важно также, что HD был благополучно удален, так как NTFS содержит флаг, чтобы заметить, если диск был благополучно удален или нет, не позволяя устанавливать его в режиме записи с родным драйвером OSX (что-то подобное происходит под Linux). В случае, если это произойдет, вам просто нужно подключить его к ПК с Windows и безопасно удалить HD (чтобы он очистил этот флаг).

и для справки Баш скрипт -

#!/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 
+1

Я не хочу писать на диск, только читать с него, что отлично работает, если я правильно размонтирую диск, но не если я просто 'FlushFileBuffers'. – ronag

+0

Я отредактировал свой ответ. надеюсь, это может помочь в улучшении поведения установленных жестких дисков NTFS. – Neil

+0

Нейл: Спасибо за ваши усилия, но вы не пытаетесь решить проблему, которую я описал. – ronag