在Linux中使用mkfs命令格式化磁盘或者分区上的文件系统
“ mkfs”中的字母代表“ make file system”。
该命令通常用于在Linux中管理存储设备。
我们可以将mkfs视为用于将磁盘格式化为特定文件系统的命令行工具。
mkfs -t [fs type] [target device]
我们还可以按以下方式使用mkfs命令。
mkfs.[fs type] [target device]
在本教程中,我将大体讨论什么是文件系统。
我还将提供有效使用mkfs命令的示例。
由于mkfs命令处理磁盘和分区,因此它需要我们是root用户或者sudo用户,并具有运行admin命令的访问权限。
mkfs是功能强大的工具。
重要的是要了解更改文件系统的潜在后果。
选择错误的设备节点将删除该设备上的所有数据。
使用此命令需要我们自担风险。
你被警告了
什么是文件系统(file system)?
文件系统(fs)是指在设备上管理数据的结构和逻辑。
文件系统控制数据的存储和检索方式。
文件系统有很多类型,每种都有各自的优缺点。
这是最常见的文件系统类型:
- FAT*
- NTFS
- ext*
- APFS
- HFS*
我们可能之前遇到过一种或者多种这些文件系统类型。
我们甚至可以将类型与它们各自的操作系统相关联。
一般而言,FAT/NTFS是为Windows设计的,Ext与Linux系统一起使用,而APFS/HFS是macOS文件系统。
这些文件中的每一个都以不同的方式处理文件结构的逻辑,这可能会导致问题。
这就是为什么在声明文件系统类型或者“格式化”设备之前考虑这一点至关重要的原因。
每个用例都是不同的,由我们决定哪种文件系统最适合需求。
mkfs命令示例
让我向我们展示mkfs命令的一些最常见用法。
请不要在实际系统上盲目尝试任何这些命令。
它将格式化目标设备/磁盘分区,擦除所有数据。
不带任何选项的mkfs创建ext2文件系统
如果我们没有为目标设备指定文件系统类型,它将使用默认的ext2文件系统。
sudo mkfs /dev/sdb1
用mkfs指定文件类型
使用ext2并不是很方便或者不可取。
如今,大多数Linux系统建议使用ext4.
我们可以通过以下方式指定文件系统:
sudo mkfs -t ext4 /dev/sdb1
我们也可以像这样使用它:
sudo mkfs.ext4 /dev/sdb1
检查设备上的坏块
我们还可以检查设备上的坏块,但请记住,检查通常需要很长时间。
sudo mkfs -c /dev/sdb1
温馨提示:检查设备的文件系统类型
我们可能要检查刚刚使用mkfs命令格式化的设备的文件系统类型。
我们可以将file命令用于此目的。
sudo file -sL /device
这是一个示例,显示了它可以显示什么样的输出:
Hyman@theitroad:~$sudo file -s /dev/nvme0n1p2 /dev/nvme0n1p2: Linux rev 1.0 ext4 filesystem data, UUID=34daa4b7-a2c4-4983-b5cc-df9baa6a6543 (extents) (64bit) (large files) (huge files)
示例- 使用mkfs命令在USB设备上创建文件系统
我们可以开始使用mkfs 格式化U盘。
查找设备
首先,我们需要找到设备。
可以使用的一种方法是sudo fdisk -l。
这将列出当前已安装的所有磁盘节点。
Hyman@theitroad:~$sudo fdisk -l Disk /dev/sda: 25 GiB, 26843545600 bytes, 52428800 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes/512 bytes I/O size (minimum/optimal): 512 bytes/512 bytes Disklabel type: dos Disk identifier: 0x3c62c49c Device Boot Start End Sectors Size Id Type /dev/sda1 * 4096 1023998 1019903 498M 83 Linux /dev/sda2 1024000 44036094 43012095 20.5G 83 Linux /dev/sda3 44036096 52424702 8388607 4G 82 Linux swap/Solaris Disk /dev/sdb: 28.93 GiB, 31040995328 bytes, 60626944 sectors Disk model: Patriot Memory Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes/512 bytes I/O size (minimum/optimal): 512 bytes/512 bytes Disklabel type: gpt Disk identifier: 91A34D6F-E67B-E54D-B19C-5CC828DAAB9A Device Start End Sectors Size Type /dev/sdb1 2048 60626910 60624863 28.9G Linux filesystem
输出显然会有所不同。
在确定所需的驱动器时,请非常小心。
如果不确定,请删除磁盘,然后再次运行fdisk -l
命令。
如果我们拥有正确的设备,则断开连接时不会列出该设备。
验证分区
我正在使用的设备是Patriot Memory USB,它位于/dev/sdb
。
除了识别正确的磁盘外,我们还需要确保更改了所需分区的fs。
我使用fdisk工具删除了现有数据并编写了一个新的分区表。
在执行此操作时,我创建了一个要写入的新分区。
该分区将成为我们的目标:/dev/sdb1
。
卸载
在尝试更改文件系统之前,我们需要使用umount
命令将其卸载。
Hyman@theitroad:~$sudo umount /dev/sdb1
创建文件系统
既然我们已经验证了目标并卸载了驱动器,则可以继续创建文件系统。
我在这里添加了-v详细选项,以在运行时显示更多信息。
Hyman@theitroad:~$sudo mkfs.ext4 /dev/sdb1 -v mke2fs 1.45.5 (07-Jan-2017) fs_types for mke2fs.conf resolution: 'ext4' Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1896832 inodes, 7578107 blocks 378905 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2155872256 232 block groups 32768 blocks per group, 32768 fragments per group 8176 inodes per group Filesystem UUID: 73882769-7599-4c79-a00b-ef317ccd921d Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
此过程可能需要一些时间,但除非目标大于2 TB,否则应在20分钟内完成。
我的程序挂在最后一个项目上时遇到了几个问题。
不幸的是,没有进度指示器,也没有抛出任何错误。
验证新创建的文件系统
首先,检查我们刚刚使用的设备的文件系统。
是我们想要的那个吗?
sudo file -sL /dev/sdb1
重要的是要确保将在使用该设备的系统上识别该设备。
我创建了一个名为test的文件夹,并其中创建了一个名为test.txt的文件。
为了节省时间,我们可以在此处复制并粘贴我的命令。
mkdir test && cd test touch test.txt echo "THIS IS ONLY A TEST" > test.txt cat test.txt
如果一切正常,则应该能够将驱动器安装到所需的系统并访问文件。
如果无法访问系统上的文件,则可能存在兼容性问题。