为什么我的设备似乎有空的符号链接?

为什么我的设备似乎有空的符号链接?

我发现我无法安装设备 sdb。

然而,我在坐骑上没看到它:

[root@idh1 rhs-hadoop-install-0_61]# mount | grep --color dev
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/VolGroup-lv_home on /home type ext4 (rw)

我没有看到任何指向它的符号链接挂载:

[root@idh1 rhs-hadoop-install-0_61]# ls -altrh /dev/* | grep sd
brw-rw---- 1 root disk      8,  16 Feb  4 14:43 /dev/sdb
brw-rw---- 1 root disk      8,  17 Feb  4 14:43 /dev/sdb1
brw-rw---- 1 root disk      8,   0 Feb  4 14:43 /dev/sda
brw-rw---- 1 root disk      8,   2 Feb  4 14:43 /dev/sda2
brw-rw---- 1 root disk      8,   1 Feb  4 14:43 /dev/sda1
lrwxrwxrwx  1 root root    6 Feb  4 14:43 8:16 -> ../sdb
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:17 -> ../sdb1
lrwxrwxrwx  1 root root    6 Feb  4 14:43 8:0 -> ../sda
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:2 -> ../sda2
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:1 -> ../sda1

这些指向的神奇“箭头”是什么../sdb?看来它们可能让 sdb 变得“繁忙”,以致我无法格式化它。

答案1

这里的问题是您使用了通配符,同时 grep 命令也对您隐藏了内容。

shell 会为您扩展通配符,因此对于 中的每个文件和目录, shell 都会ls将该命令视为等等。您可以通过执行以下命令来演示 shell 如何扩展通配符。ls /dev/autofs /dev/block /dev/bsg/dev/lsecho /dev/*

这样做的副作用是,所有文件夹中的所有文件/dev/也会列出。由于您的ls命令(在 shell 扩展通配符之后)包含一堆目录,因此每个目录都有自己的标题。因此实际输出如下所示:

brw-rw---- 1 root disk      8,  16 Feb  4 14:43 /dev/sdb
brw-rw---- 1 root disk      8,  17 Feb  4 14:43 /dev/sdb1
brw-rw---- 1 root disk      8,   0 Feb  4 14:43 /dev/sda
brw-rw---- 1 root disk      8,   2 Feb  4 14:43 /dev/sda2
brw-rw---- 1 root disk      8,   1 Feb  4 14:43 /dev/sda1

...

/dev/block:
total 0
lrwxrwxrwx  1 root root    6 Feb  4 14:43 8:16 -> ../sdb
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:17 -> ../sdb1
lrwxrwxrwx  1 root root    6 Feb  4 14:43 8:0 -> ../sda
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:2 -> ../sda2
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:1 -> ../sda1

但是,该/dev/block行被grep命令隐藏了,所以你看不到它。尝试不使用grep,也许使用less,以清楚地看到ls输出的内容。

更令人困惑的是,8:16in8:16 -> ../sdb是一个文件名,而不是时间戳或其他任何东西。/dev/block/8:16是块设备的名称,它被符号链接到../sdb,或者/dev/sdb像它一样。

您可以ls通过指定标志来停止扩展子目录d

ls -altrhd /dev/* | grep sd

或者当然也可以不在后面放置通配符/dev/

ls -altrh /dev/ | grep sd

答案2

首先,您不想挂载sdb设备上的分区sdb1。这就是您无法挂载它的原因。

至于魔法箭,它们不是魔法或箭,文件名实际上是时间后的数字:

lrwxrwxrwx  1 root root    6 Feb  4 14:43 8:16 -> ../sdb
                                          ----
                                            |-> File name   

箭头本身是符号链接的标准符号。一般格式为:

link_name -> /path/to/target

这些实际上不是在,/dev而是在/dev/block,并且正确指向/dev/sdb来自(是父目录)。列出它们的原因是因为您运行的../sdb是而不是,所以还列出了所有子目录的内容。/dev/block..ls /dev/*ls /dev/

您可以通过运行以下命令来检查所有这些:

$ ls -lath /dev/sd*
brw-rw---- 1 root disk      8,  16 Feb  4 14:43 /dev/sdb
brw-rw---- 1 root disk      8,  17 Feb  4 14:43 /dev/sdb1
brw-rw---- 1 root disk      8,   0 Feb  4 14:43 /dev/sda
brw-rw---- 1 root disk      8,   2 Feb  4 14:43 /dev/sda2
brw-rw---- 1 root disk      8,   1 Feb  4 14:43 /dev/sda1

$ ls -lath /dev/block/sd*
lrwxrwxrwx  1 root root    6 Feb  4 14:43 8:16 -> ../sdb
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:17 -> ../sdb1
lrwxrwxrwx  1 root root    6 Feb  4 14:43 8:0 -> ../sda
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:2 -> ../sda2
lrwxrwxrwx  1 root root    7 Feb  4 14:43 8:1 -> ../sda1

相关内容