Mac OS X - NTFS USB 驱动器文件权限问题

Mac OS X - NTFS USB 驱动器文件权限问题

我可以读取/写入 NTFS 外部 USB 驱动器内的文件。

我在处理存储在 NTFS 外部驱动器上的 AVI/MKV 等大型文件时遇到了一些问题。这些文件在 Finder 中显示为灰色,并且我一直使用 Finder,当我使用视频播放器“打开”时,我收到一个奇怪的错误:

项目“file.avi”由 Mac OS X 使用,无法打开。

好吧,我找到了一个解决方法:如果我将图片拖放file.avi到我的视频播放器中,一切都会正常工作。

但我确实不知道为什么会出现这个问题。

请考虑我没有安装任何 NTFS 自定义驱动程序(即 MacFUSE 或 NTFS-3g)。要在 R/WI 中安装我的 NTFS USB 驱动器,只需修改/etc/fstab,添加以下行:

LABEL=WD320 none ntfs rw

答案1

我发现一个线程处理完全相同的主题。文件显示为灰色,无法打开,并显示相同的错误消息。

以下是(希望)解决该问题的步骤:

  • 打开终端并运行

    xcode-select --install
    
  • 以上将安装 XCode 命令行工具

  • 然后,运行

    GetFileInfo /Volumes/WD320/yourfile.avi
    
  • 应该有关于文件类型和创建者以及其他文件属性的信息

  • 现在,通过调用来更改这些属性

    SetFile -c "" -t "" /Volumes/WD320/yourfile.avi
    
  • 现在文件应该可以播放了

我显然无法尝试它(我通常会这样做),但也许它会有所帮助。

答案2

项目“file.avi”由 Mac OS X 使用,无法打开。

这意味着该项目已设置了文件类型'brok'和创建者代码'MACS'(且未被清除):

在此处输入图片描述

当您使用 Finder 复制文件时,Finder 首次创建复制文件时,会将特殊文件类型设置为'brok',并将创建者代码设置为'MACS'(Finder 本身的创建者代码),以表示该文件正在使用中。Finder 完成创建复制文件后,会将文件类型和创建者代码重置为原始文件的类型和创建者代码。

通常情况下,您只会遇到'brok'文件类型未重置的情况,如果 Finder 崩溃或在文件复制过程中以其他方式中断。如果您遇到的情况并非如此,那么您看到的情况很可能是rw内置 NTFS 驱动程序支持中的错误。

正如 slhck 提到的,您应该能够通过清除相关文件的文件类型和创建者代码来清除 Finder 的此反应。

答案3

我对这个问题的回答是拼凑了从其他几篇文章(非常感谢)中得到的答案以及我自己的经验的结果。

背景:我有一个带有 NTFS 文件系统的外部硬盘。我想偶尔插入它。以前,该卷会以“只读”方式挂载。修复该问题后,卷上的文件处于不可用状态。为了正确挂载卷并让文件可访问,我必须执行以下操作:

仅供参考:我是 kornshell 用户。请将这些命令调整为您喜欢的 shell。

$ sudo ksh
<password>

$ mv /sbin/mount_ntfs /sbin/mount_ntfs.orig

$ vi /sbin/mount_ntfs

然后粘贴下面的内容:

#!/bin/ksh

# --- direct all script stdout to a temp file for examination
exec > /tmp/ntfs

# --- connect all stderr to stdout
exec 2>&1

# --- get the last argument on the command line - this is the mount point
eval echo \$$# |
read MOUNT_PT
echo "\${MOUNT_PT} = \"${MOUNT_PT}\""
echo

echo "Mounting $@"

# --- call the original ntfs mounter with the arguments handed in
/sbin/mount_ntfs.orig -o rw "$@"

echo "Mounted  $@"

# --- show the result of the mounting operation
mount

# --- fix files at the newly mounted MOUNT_PT that are in the 'brok' state
find "${MOUNT_PT}" -type f |
while read FILE; do

    # ---
    # --- use 'SetFile' to modify the file status
    # ---
    # --- this command line assumes the 'SetFile' command has been installed
    # --- and is available in your PATH
    # ---
    SetFile -c "" -t "" "${FILE}"

done

然后:

$ chmod a+x /sbin/mount_ntfs

$ chown root:wheel /sbin/mount_ntfs

现在,无论何时插入磁盘,它都会被挂载为“读/写”,并且磁盘上的文件会重置为“brok”状态。这个脚本对我来说很有效。您的情况可能会有所不同。

享受 -

答案4

非常感谢 - 我改进了上面的脚本,因为它无法在我的 OSX 10.8.4 机器上运行(出现错误)并且有点慢。只需要在安装只读磁盘时检查... 标记为的更改JCV CHANGED

#!/bin/ksh

# --- direct all script stdout to a temp file for examination
exec > /tmp/ntfs

# --- connect all stderr to stdout
exec 2>&1

# --- get the last argument on the command line - this is the mount point
eval MOUNT_PT=\${$#}
# -- JCV CHANGED: corrected eval expression

echo "\${MOUNT_PT} = \"${MOUNT_PT}\""
echo

echo "Mounting $@"

# --- call the original ntfs mounter with the arguments handed in
/sbin/mount_ntfs.orig "$@"

echo "Mounted  $@"

# --- show the result of the mounting operation
 mount

# --- fix files at the newly mounted MOUNT_PT that are in the 'brok' state
find "${MOUNT_PT}" -type f |
while read FILE; do
  #JCV CHANGED: added check whether file type affected
  GetFileInfo -t "${FILE}"  | read FILETYPE
    if [[ $FILETYPE = "\"brok\"" ]];then
    # ---
    # --- use 'SetFile' to modify the file status
    # ---
    # --- this command line assumes the 'SetFile' command has been installed
    # --- and is available in your PATH
    # ---
    SetFile -c "" -t "" "${FILE}"
    echo "fixing file ${FILE}"
   fi
done

相关内容