文件系统的一个非常奇怪的行为,薛定谔的文件

文件系统的一个非常奇怪的行为,薛定谔的文件

我对 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

现在,如果您足够幸运,您的问题可能会得到解决。不幸的是,对我来说,该命令仍然返回错误。也许还有另一种方法可以修复我不知道的驱动器映射。我只是选择了简单的路径并格式化了驱动器,之后问题就消失了。

相关内容