草庐IT

c - 安全移除安装的驱动器

coder 2024-06-15 原文

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

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

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

磁盘中可能缺少什么导致 OS X 找不到任何东西,有没有一种方法可以在不卸载驱动器的情况下刷新数据?

编辑:

使用 exfat 我遇到了“脏”驱动器在重新安装时不可写的问题。

最佳答案

你可能想阅读这篇 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 for Mac,但也有免费的甚至更好的解决方案可用。

编辑 - 我已阅读以下内容,这可能有助于重新安装 NTFS 驱动器等 - 我不得不承认偶尔只使用 MAC。 - 希望我没有跑错你的方向....

这是我在苹果论坛上找到的帖子 -

我创建了一个脚本来初始化 NTFS HDisks 并在写入模式下使用它们,只需使用 native OSX 驱动程序,无需第三方软件)。它似乎也适用于小牛队。您可以从以下位置下载它:

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

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

HD 已被安全移除也很重要,因为 NTFS 包含一个标志来通知磁盘是否已安全移除,不允许使用 native OSX 驱动程序以写入模式安装它(类似于发生在 Linux 下)。万一发生这种情况,您只需将它插入 Windows PC 并安全地移除 HD(这样它就会清除该标志)。

并供您引用 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

关于c - 安全移除安装的驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31744502/

有关c - 安全移除安装的驱动器的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  3. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  4. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  5. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  6. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  7. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  8. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  9. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  10. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

随机推荐