mkfs 失败并抱怨:“/dev/sdb 显然正在被系统使用;不会在这里创建文件系统”

mkfs 失败并抱怨:“/dev/sdb 显然正在被系统使用;不会在这里创建文件系统”

这是 Ubuntu 服务器 11.10。

/dev/sdb 未安装(见下面的输出),并且我看不到任何进程使用它。它也不用于交换。这是服务器中的第二个 IDE 驱动器,连接到辅助 IDE 并在硬件 raid 中设置为阵列 2。

我无法安装该驱动器,因为我收到投诉,它可能已被使用。我运行了 fdisk,删除了所有以前的分区并创建了一个主分区。

root@sargent:/home/harel# fdisk -l /dev/sdb

Disk /dev/sdb: 122.9 GB, 122942324736 bytes
226 heads, 63 sectors/track, 16864 cylinders, total 240121728 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00083711

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   240121727   120059840   83  Linux


root@sargent:/home/harel# mkfs -t ext4 /dev/sdb
mke2fs 1.41.14 (22-Dec-2010)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
/dev/sdb is apparently in use by the system; will not make a filesystem here!

root@sargent:/home/harel# cat /proc/swaps 
Filename                Type        Size    Used    Priority
/dev/sda5                               partition   2619388 0   -1

root@sargent:/home/harel# mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)

答案1

再次检查您的分区,但不指定 /dev/sda:

# fdisk -l

然后,如果您在输出中找到类似/dev/md0,- 的内容,则表示您已经获得了 sw 阵列,并且您尝试格式化的磁盘包含该阵列的元数据。

在这种情况下:

# umount /dev/md0
# mdadm --stop /dev/md0

清除磁盘的超级块:

# mdadm --zero-superblock /dev/sdb

移除数组

# mdadm --remove /dev/md0

不,您可以使用您的驱动器。

答案2

/dev/sdb正在使用,因为上面有操作系统知道的分区。如果您想在其上创建文件系统(这是一个坏主意,因为很少这样做,这会让管理员感到困惑,并且会使任何类型的拆分或调整大小变得困难),请先使用 删除现有分区fdisk。如果您想在唯一的分区上创建文件系统/dev/sdb1(这是您应该做的,因为直接使用磁盘没有任何好处),然后说出您的意思:mkfs /dev/sdb1

答案3

您之所以收到此错误消息,是因为/dev/sdb有一个分区(即/dev/sdb1),并且 mkfs 调用也会覆盖您的分区表的全部或部分。在最坏的情况下,您的文件系统将无法使用。或者您“只是”丢失了您可能仍然需要的分区表。由于分区设备文件和实际的磁盘分区表应该讲述相同的故事,因此可以说它们正在被内核“使用”。

因此,简单的规则是:如果您想在整个磁盘设备上创建文件系统,请确保之前删除所有分区。例如:

# ls /dev/sdb*
/dev/sdb /dev/sdb1
# sfdisk --delete /dev/sdb
# sfdisk --list /dev/sdb
# ls /dev/sdb*
/dev/sdb

通常,分区工具会通知内核更新其分区设备文件。但有时(例如对于环回设备),可能需要明确删除它们(在删除分区表后),例如通过partx -dv mydevand/或kpartx -dv mydev

请注意,先前的命令kpartx -av mydev可能会将分区设备创建为/dev/mapper/mydev*而不是/dev/mydev*。当它们存在时,mkfs 会以相同的方式发出抱怨。

答案4

就我而言sudo umount /dev/sdb,有效。

相关内容