我对 Unix 很陌生,我希望得到你的帮助来解决这个奇怪的行为
我有一个用户目录/Users/den
den$ ls -la
total 208
drwxrwx---+ 19 den staff 608 18 Jan 16:35 .
drwxr-xr-x 5 root admin 160 30 Oct 16:04 ..
-rwxrwx--- 1 den staff 3 17 Jan 17:57 .CFUserTextEncoding
drwxrwx--- 2 den staff 64 18 Jan 15:35 .Trash
-rwxrwx--- 1 den staff 11976 18 Jan 15:43 .bash_history
-rwxrwx--- 1 den staff 438 17 Jan 20:34 .bash_profile
drwxrwx--- 3 den staff 96 18 Jan 15:36 .bash_sessions
-rwxrwx--- 1 den staff 78473 17 Jan 20:28 .git-completion.bash
-rwxrwx--- 1 den staff 595 18 Jan 00:26 .zsh_history
drwxrwx---+ 4 den staff 128 17 Jan 19:00 Desktop
drwxrwx---+ 4 den staff 128 17 Jan 20:46 Documents
drwxrwx---+ 3 den staff 96 17 Jan 17:57 Downloads
drwxrwx---@ 56 den staff 1792 18 Jan 15:35 Library
drwxrwx---+ 3 den staff 96 17 Jan 17:57 Movies
drwxrwx---+ 3 den staff 96 17 Jan 17:57 Music
drwxrwx---+ 4 den staff 128 17 Jan 18:12 Pictures
drwxrwx---+ 4 den staff 128 17 Jan 17:57 Public
在该目录中,我尝试为 git 创建一个配置文件
192:~ den$ touch .gitconfig
touch: .gitconfig: No such file or directory
touch
例如,如果我尝试做其他事情,.gitconfig1
192:~ den$ touch .gitconfig1
192:~ den$ ls -la
total 208
drwxrwx---+ 20 den staff 640 18 Jan 16:55 .
drwxr-xr-x 5 root admin 160 30 Oct 16:04 ..
-rwxrwx--- 1 den staff 3 17 Jan 17:57 .CFUserTextEncoding
drwxrwx--- 2 den staff 64 18 Jan 15:35 .Trash
-rwxrwx--- 1 den staff 11976 18 Jan 15:43 .bash_history
-rwxrwx--- 1 den staff 438 17 Jan 20:34 .bash_profile
drwxrwx--- 3 den staff 96 18 Jan 15:36 .bash_sessions
-rwxrwx--- 1 den staff 78473 17 Jan 20:28 .git-completion.bash
-rw-r--r-- 1 den staff 0 18 Jan 16:55 .gitconfig1
-rwxrwx--- 1 den staff 595 18 Jan 00:26 .zsh_history
drwxrwx---+ 4 den staff 128 17 Jan 19:00 Desktop
drwxrwx---+ 4 den staff 128 17 Jan 20:46 Documents
drwxrwx---+ 3 den staff 96 17 Jan 17:57 Downloads
drwxrwx---@ 56 den staff 1792 18 Jan 15:35 Library
drwxrwx---+ 3 den staff 96 17 Jan 17:57 Movies
drwxrwx---+ 3 den staff 96 17 Jan 17:57 Music
drwxrwx---+ 4 den staff 128 17 Jan 18:12 Pictures
drwxrwx---+ 4 den staff 128 17 Jan 17:57 Public
我可以毫无问题地创造它,只有.gitconfig
它本身是不可触及的。
我观察到的另一件有趣的事情是,如果我尝试在该文件夹中自动完成 .git,它实际上会建议我.gitconfig
作为选项之一。
192:~ den$ nano .git
.git-completion.bash .gitconfig .gitconfig1
192:~ den$ nano .git
您对可能发生的事情有什么想法吗?
答案1
问题是文件系统损坏且无法修复。
这是 macOS 特有的问题:fsroot root tree is invalid
谢谢大家的建议
根据@Kusalananda 的要求,我采取的步骤。注意:仅适用于 macOS。
启动进入恢复模式(推荐,这样您就可以卸载启动驱动器)在 MacOS 启动期间按 CMD + R
执行diskutil list
并观察你的驱动器
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *240.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_APFS Container disk2 239.8 GB disk0s2
/dev/disk1 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *120.0 GB disk1
1: EFI EFI 209.7 MB disk1s1
2: Apple_HFS SSD 119.7 GB disk1s2
/dev/disk2 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +239.8 GB disk2
Physical Store disk0s2
1: APFS Volume main 11.1 GB disk2s1
2: APFS Volume Preboot 24.3 MB disk2s2
3: APFS Volume Recovery 525.8 MB disk2s3
4: APFS Volume VM 1.1 GB disk2s4
5: APFS Volume main - Data 10.1 GB disk2s5
您需要的内容位于IDENTIFIER
列中
从中获取值(disk0s1...)并运行它
diskutil verifyVolume <IDENTIFIER>
例子:diskutil verifyVolume disk0s1
对我来说,一旦我跑完了disk0s2
我就得到了
fsroot tree is invalid
The volume /dev/disk0s2 could not be verified completely
如果这是您的启动驱动器,则需要在执行下一步操作之前卸载它
diskutil unmount <volume>
喜欢diskutil unmount /dev/disk0s2
现在返回到磁盘列表并找出为此标识符设置的格式。
在我的示例中,它Apple_APFS Container disk2
意味着它是 APFS 格式。
现在你需要跑fsck_<file format> -y <broken volume>
因为就我而言,驱动器的格式是APFS
,我需要修复/dev/disk0s2
它,如下所示:
fsck_apfs -y /dev/disk0s2
以供参考
fsck_apfs [ [-q | -n | -y] [-l] [-s] [-S] [-o] ] device
-q quick check if the superblock and checkpoint superblock are valid.
-n verify only (answer "no" to questions)
-y always repair (answer "yes" to questions)
-l live fsck (lock down for verify-only)
-s print space verification summary
-S skip iteration of snapshots, although no repairs can be made.
-o repair overallocations; please do not run an older fsck_apfs on newer systems with this option
现在,如果您足够幸运,您的问题可能会得到解决。不幸的是,对我来说,该命令仍然返回错误。也许还有另一种方法可以修复我不知道的驱动器映射。我只是选择了简单的路径并格式化了驱动器,之后问题就消失了。