題 在OSX / Linux之間共享的HFS +主分區上的鎖定文件


我在我的MacBook pro上雙啟動進入Arch Linux和OS X 10.6。我在兩個操作系統之間同步了我的UID並創建了一個HFS分區(沒有日記功能)用作共享主目錄/用戶分區。在大多數情況下,它的運行方式與我期望的一樣,但有時當我啟動到OS X時,某些文件被“鎖定”(當我獲取特定文件的信息時,在“常規”下檢查“已鎖定”框)我可以通過手動取消選中框來解決問題)和/或當我嘗試刪除或chmod'ing文件時,我得到“不允許操作”。在這兩種情況下,我都沒有在ls -l顯示的權限位上看到任何異常,除了在通常發生粘滯位的位置有一個尾隨的“@”字符:

-rw-r--r--@  1 myuser  mygroup   296 Mar 29 11:44 myfile

這個'@'字符顯示在所有普通文件上,因此似乎沒有鏈接到鎖定/操作非權限情況。

在Linux方面我從未遇到過許可問題。就我對ACL的有限知識和經驗而言,我沒有在任何相關文件上找到任何ACL。

為了它的價值,我使用emacs(OSX中的Aquamacs)進行大部分文件編輯,是否有可能設置奇怪的權限位?

  1. 什麼是OS X使用的“鎖定”設置,並且它具有等效的權限位(因此至少我可以從終端遞歸解鎖主目錄中的所有文件)
  2. 為什麼可能會有一些,但其他文件在啟動到OS X時沒有被“鎖定”
  3. '@'字符的含義是什麼?

4
2018-05-17 16:22


起源


快速更新,我剛剛發現了“chflags”命令,並且“鎖定”項相當於設置/取消設置uchange標誌,所以我可以使用它來遞歸解鎖我的文件,但我仍然很好奇如何/為什麼他們首先被鎖定了。 - HazyBlueDot
考慮 禁用卷的權限:“此外,OS X允許管理員用戶通過在Finder中選擇卷上的獲取信息,然後選中”忽略此卷上的所有權“複選框,以每卷為基礎禁用可移動卷的所有權和權限檢查。 (來自Apple文檔) - ignis


答案:


我也遇到過同樣的問題。

我從這里和其他地方讀到的信息中的理解是,它是hfsplus模塊中的Linux內核錯誤。它為文件添加隨機用戶標誌。有兩個標誌阻止編輯/刪除文件:uchg和uappnd。這是兩個壞人。它們可以應用於文件甚至父目錄。

標誌顯示為:

$ ls -laO / Volumes / my-volume

標誌可以遞歸刪除:

$ man chflags

$ chflags -R nouchg,nouappnd,noopaque,dump / Volumes / my-volume

注意:我也刪除了opaque和nodump標誌。我不需要旗幟。


5
2017-09-21 15:23



偉大的食譜 - 幫幫我! - akauppi


@ 表示文件在文件系統中附加了“擴展屬性”(額外元數據,縮寫為“xattrs”)。要查看附加到文件的xattrs列表,請執行 ls -l@ 在Mac OS X中。

經典Mac OS具有“Finder Info”的概念,它是HFS卷上所有文件都具有的小型固定(不可擴展)元數據集。這包括“類型和創建者代碼”和“Finder標誌”,包括“鎖定”位,“可見”(隱藏)位以及其他幾個。 Mac OS X基本上已經棄用了舊的Finder元數據,但是在它仍然需要的情況下,它現在作為xattr附加到文件系統中的文件記錄。您看到的那些鎖定文件幾乎肯定會附加此Finder信息xattr,因此可以記錄舊Finder“鎖定”位的狀態。

我的雪豹系統有一個 /usr/bin/xattr 似乎沒有手冊頁的命令,但如果你用它調用它,它確實有一個用法語句 -h。注意 xattr -l filename 可以用於獲取附加到文件的xattrs值的十六進制/ ASCII轉儲。

Mac OS X的內置命令用於查看和操作來自終端的舊Finder信息xattr GetFileInfo(1) 和 SetFile(1)

更新:
我沒有很好的解釋為什麼這些文件被鎖定,但我的預感是,你在Linux中運行的任何HFS支持軟件要么誤解舊的Finder鎖定位的目的和不推薦的狀態,並在設置它時它不應該,或者它故意使用鎖定位作為將某種Linux文件系統語義概念映射到HFS的機制。

Finder鎖定位用於讓用戶手動鎖定自己的文件,這樣他們就不會意外地修改或刪除它們,並且  意味著作為進程級文件鎖定的機制,以避免多個進程同時寫入同一文件。也就是說,它不應該是替代品 fcntl(2) 要么 flock(2)。在設計Finder鎖定位時,Mac不是多處理系統。

更新2: 也可能是Aquamacs濫用舊的Finder鎖定位來執行emacs的文件鎖定願望。


3
2018-05-17 18:41





我找到了一個解決方法。它似乎是hfsplus內核模塊中的競爭條件,由非原子訪問用戶標誌引起。我已禁用它,用戶標誌將為零,解鎖,對我來說沒問題。

第248行附近的fs / hfsplus / inode.c:

    inode->i_mode = mode;

/* FIXME commented out because of unreliable results, needs mutex_lock (?) */
//    HFSPLUS_I(inode)->userflags = perms->userflags;
    if (perms->rootflags & HFSPLUS_FLG_IMMUTABLE)

第79行附近的fs / hfsplus / catalog.c:

            perms->rootflags &= ~HFSPLUS_FLG_APPEND;

/* FIXME commented out because of unreliable results, needs mutex_lock (?) */
//    perms->userflags = HFSPLUS_I(inode)->userflags;
    perms->mode = cpu_to_be16(inode->i_mode);

你可以構建一個自定義內核,但我使用dkms:

$ cd /usr/src
$ tar xjpvf linux-source-*.tar.bz2 linux-source-*/fs/hfsplus
$ cp -R linux-source-*/fs/hfsplus hfsplus-YOUR_VERSION
$ vi hfsplus-YOUR_VERSION/inode.c
$ vi hfsplus-YOUR_VERSION/catalog.c
$ vi hfsplus-YOUR_VERSION/dkms.conf (see below for the content)
$ su
# dkms install hfsplus/YOUR_VERSION

/usr/src/hfsplus-YOUR_VERSION/dkms.conf:

NAME=hfsplus
VERSION=YOUR_VERSION
PACKAGE_NAME="$NAME"
PACKAGE_VERSION="$VERSION"
MAKE[0]="make -C ${kernel_source_dir}
  SUBDIRS=${dkms_tree}/${NAME}/${VERSION}/build modules"
BUILT_MODULE_NAME[0]="hfsplus"
DEST_MODULE_LOCATION[0]="/kernel/fs/hfsplus"
REMAKE_INITRD=y
AUTOINSTALL="yes"

注意:如果我沒有進入/ usr / src,安裝將失敗。

要卸載:

# dkms remove hfsplus/YOUR_VERSION --all

環境:MacBookPro7,1,Core 2 Duo,SATA NVidia MCP89 AHCI,Mac OS X 10.6,Debian GNU / Linux,內核2.6.28,2.6.29,3.0,3.1,3.2。


3
2017-08-04 12:24



你有沒有報告這個上游?我想我遇到了同樣的問題。 - Blaisorblade
更新:該錯誤已在Linux 3.4中修復。正確的解決方法是: git.kernel.org/?p=linux/kernel/git/torvalds/... - Blaisorblade
哇,第一個糾正補丁,我看作是SO / SU答案。榮譽。 - akauppi
@FrankGanske:只是為了澄清:修復“有效”,但與官方版本有所不同,可能有缺點(我猜它會阻止改變) userflags 有目的地,正如答案承認的那樣)。 - Blaisorblade


這是一個Linux內核錯誤,修復於3.4(補丁)。

我使用純Unix實用程序遇到了同樣的問題。也就是說,我使用rsync從Xubuntu 12.04實時備份我的Mac OS X硬盤。恢復後,許多文件夾被隨機鎖定,包括git存儲庫中的目錄(我非常懷疑git會這樣做)。你可以看到那些屬性 ls -lO。在我的備份上執行此操作表明這些位具有基本上隨機的值:

# ls -ldO /Volumes/HFS+Backup/Users/pgiarrusso/*
drwx------   31 pgiarrusso  staff  uchg,nodump,opaque         1054 Aug 13 02:00 /Volumes/HFS+Backup/Users/pgiarrusso/Desktop
drwx------   36 pgiarrusso  staff  nodump                     1224 Jul 22 16:04 /Volumes/HFS+Backup/Users/pgiarrusso/Documents
drwx------  108 pgiarrusso  staff  uappnd                     3672 Aug 13 11:43 /Volumes/HFS+Backup/Users/pgiarrusso/Downloads
drwx------   13 pgiarrusso  staff  uappnd,uchg,opaque          442 Jul 22 05:04 /Volumes/HFS+Backup/Users/pgiarrusso/Dropbox
drwx------   53 pgiarrusso  staff  -                          1802 Aug 12 00:58 /Volumes/HFS+Backup/Users/pgiarrusso/Library
drwx------   11 pgiarrusso  staff  uchg,nodump,opaque          374 Jul 22 17:25 /Volumes/HFS+Backup/Users/pgiarrusso/Movies
drwx------   13 pgiarrusso  staff  uappnd,uchg,nodump          442 Jun 10 12:05 /Volumes/HFS+Backup/Users/pgiarrusso/Music
drwx------   15 pgiarrusso  staff  uappnd,nodump,opaque        510 Jun 10 12:05 /Volumes/HFS+Backup/Users/pgiarrusso/Pictures
drwxr-x---   11 pgiarrusso  staff  opaque                      374 Jul  6 15:33 /Volumes/HFS+Backup/Users/pgiarrusso/Public
drwxr-xr-x   34 pgiarrusso  staff  uappnd,uchg,opaque         1156 May 27 12:39 /Volumes/HFS+Backup/Users/pgiarrusso/Sites
drwxr-xr-x    2 pgiarrusso  staff  uappnd,nodump,opaque         68 Jun 10 21:43 /Volumes/HFS+Backup/Users/pgiarrusso/VirtualBox VMs
-rwxr-xr-x    1 pgiarrusso  staff  uappnd,nodump,opaque       1703 Feb 19  2012 /Volumes/HFS+Backup/Users/pgiarrusso/bash-prompt.sh
drwxr-xr-x   22 pgiarrusso  staff  -                           748 Aug 10 19:47 /Volumes/HFS+Backup/Users/pgiarrusso/bin
lrwxrwxrwx    1 pgiarrusso  staff  nodump,opaque                37 Sep 27  2011 /Volumes/HFS+Backup/Users/pgiarrusso/default.sfx -> /Users/pgiarrusso/opt/rar/default.sfx
-rw-r--r--    1 pgiarrusso  staff  uappnd,uchg          1375563169 Aug  2 18:52 /Volumes/HFS+Backup/Users/pgiarrusso/heapdump-1343925310626.hprof
drwxr-xr-x   22 pgiarrusso  staff  uappnd,nodump               748 Aug  1 22:15 /Volumes/HFS+Backup/Users/pgiarrusso/opt
drwxr-xr-x    7 pgiarrusso  staff  uappnd                      238 Apr 19 20:00 /Volumes/HFS+Backup/Users/pgiarrusso/share
drwxr-xr-x   35 pgiarrusso  staff  nodump,opaque              1190 Aug 10 00:06 /Volumes/HFS+Backup/Users/pgiarrusso/tmp

我已經將它與工作文件系統上的同一目錄進行了比較,並且沒有設置這些位。


1
2017-09-09 15:52