提示:dosftools工具资源已放入文章中
前言
在Linux中,对SD卡进行格式化是一项非常重要的技能。无论是开发人员、系统管理员还是普通用户,都需要掌握这一技能。本篇文章将介绍Linux中对SD卡进行格式化的步骤和注意事项。
一,SD卡简介
SD卡是Secure Digital卡的缩写,是一种小型的存储设备,是一种无旋转部件、可随身携带的固态存储卡。SD卡分为标准SD卡和microSD卡两种类型,其中microSD卡是一种更小型的SD卡。SD卡是一种十分方便的存储设备,便于携带、读写速度快、容量大等特点使它成为了许多移动设备上常用的存储介质。
二,SD卡文件系统
SD卡可以使用多种文件系统进行格式化,常见的格式包括:
- FAT32:这是一种广泛支持的文件系统,适用于多个操作系统包括Windows、Mac和Linux。它支持较大的文件存储和兼容性,但单个文件大小受到4GB限制。
- exFAT:这是一个用于大容量存储设备的文件系统,可支持非常大的文件和存储容量。它提供了更好的兼容性和文件大小限制比FAT32更高。
- NTFS:这是Windows操作系统最常用的文件系统,支持大容量存储和较大的文件大小,但对于非Windows系统的兼容性较差。
- ext4:这是Linux上最常用的文件系统,支持大容量存储和较大的文件大小,同时具备稳定性、性能和安全性。
选择适当的文件系统格式取决于你的需求和所使用的操作系统。如果需要在多个操作系统之间共享SD卡,可以选择FAT32或exFAT。如果主要在Linux系统中使用SD卡,可以选择ext4文件系统。如果只在Windows系统中使用,则可以选择NTFS。
三,SD卡格式化方式
1.使用格式化命令
请注意,格式化SD卡将清除其上的所有数据,请在操作之前备份重要数据。
- 确定SD卡的设备路径。运行以下命令:
fdisk -l
找到对应SD卡的设备路径,一般以/dev/sdX(其中X为字母)命名。
- 卸载SD卡。如果SD卡已经挂载(自动挂载),请运行以下命令卸载它(请将
/dev/sdX替换为实际设备路径):
umount /dev/sdX
- 格式化SD卡。可以使用
mkfs命令格式化SD卡。
例如,使用 ext4 文件系统格式化:
mkfs.ext4 /dev/sdX
或者使用 FAT32 文件系统格式化:
mkfs.vfat /dev/sdX
注意:
请确保将/dev/sdX替换为实际设备路径,以免意外格式化错误设备。执行这些命令后,SD卡将被格式化为指定的文件系统。
2.使用系统函数
格式化SD卡,使用FAT32格式
char format_cmd[64] = {0};
snprintf(format_cmd, 64, "mkfs.vfat %s -v -S 32768 -n %s", /dev/sdX);
system(format_cmd);
snprintf中具体含义如下:
format_cmd:是一个字符数组,用于存储格式化后的字符串。64:是字符数组format_cmd的长度。"mkfs.vfat %s -v -S 32768 -n %s":是一个格式化字符串,其中%s是占位符,后面的参数将会替换它们来生成最终的字符串。具体含义如下:mkfs.vfat:是一个命令行工具,用于在Linux中对文件系统进行格式化。%s:是占位符,代表将来会被替换成一个字符串,这里是/dev/sdX,是SD卡的设备路径。-v:是一个选项,代表在格式化过程中输出详细信息。-S 32768:是一个选项,代表在格式化过程中使用的扇区大小。-n %s:是一个选项,代表在格式化过程中为文件系统设置一个名称。这里的%s同样是占位符,将来会被替换成一个字符串,这里是SD卡的名称。
总的来说,这段代码的目的是生成一个格式化命令,用于在Linux中对SD卡进行格式化。%s是占位符,可以根据需要替换成不同的设备路径和名称。
注意:
上述代码中的/dev/sdX应该替换为你实际连接的SD卡设备的路径。你可以使用lsblk或者fdisk -l命令来查看SD卡设备的路径。例如,如果你的SD卡设备路径是/dev/sdb,那么替换为/dev/sdb。
3.使用格式化工具
dosfstools简介:
dosfstools是一个用于操作FAT文件系统的工具集,特别是针对DOS和Windows系统兼容性的FAT文件系统。dosfstools提供了用于创建、修复和调整FAT文件系统的命令行工具。它支持FAT12、FAT16和FAT32文件系统,并提供了以下主要工具:
- mkfs.fat:用于创建新的FAT文件系统。
- fsck.fat:用于检查和修复FAT文件系统的一致性。
- dosfsck:是fsck.fat的旧版名称,现已废弃。
- fatsort:用于对FAT文件系统中的文件进行排序。
- fsck.msdos:用于检查和修复FAT12/FAT16文件系统。
dosfstools是在Linux系统上操作FAT文件系统的主要工具之一。它可以帮助用户在Linux上创建、修复和维护与DOS和Windows兼容的SD卡、U盘等可移动存储设备上的FAT文件系统。
当使用dosfstools时,可以通过命令行工具来执行各种操作。以下是dosfstools的几个常用命令及其用法:
-
创建DOS/FAT文件系统:
使用mkfs.fat命令可以创建DOS/FAT文件系统。以下是创建FAT32文件系统的示例命令:mkfs.fat -F 32 /dev/sdb1这将在
/dev/sdb1设备上创建一个FAT32文件系统。 -
检查和修复DOS文件系统:
使用fsck.fat命令可以检查和修复DOS文件系统的一致性。以下是检查并修复文件系统的示例命令:fsck.fat -a /dev/sdb1这将检查并自动修复
/dev/sdb1设备上的DOS文件系统。 -
设置或获取DOS文件系统的卷标:
使用dosfslabel命令可以设置或获取DOS文件系统的卷标。以下是设置卷标的示例命令:dosfslabel /dev/sdb1 MYLABEL这将为
/dev/sdb1设备上的文件系统设置卷标为MYLABEL。 -
检查和修复MS-DOS文件系统:
使用fsck.msdos命令可以检查和修复MS-DOS文件系统的一致性。以下是检查并修复文件系统的示例命令:fsck.msdos -a /dev/sdb1这将检查并自动修复
/dev/sdb1设备上的MS-DOS文件系统。
这些命令只是dosfstools提供的一部分功能,还有其他命令和选项可用于更高级的操作。可以通过在终端中运行man命令加上相应命令的名称,如man mkfs.fat,来查看完整的命令文档和使用说明。
请注意,在使用dosfstools时,务必小心操作,确保选择正确的设备或文件,并备份重要数据,以免意外删除或格式化。
四,格式化函数解析
函数路径:src\ mkfs.fat.c \ int main(int argc, char **argv)
- open函数打开一个文件,它需要两个参数:文件名和打开模式。
- device_name是设备文件的名称
- O_EXCL表示如果文件已经存在,则不打开该文件。这可以确保不会覆盖现有文件的内容。
- O_RDWR表示以读写模式打开文件。这意味着可以同时读取和写入文件。
dev = open(device_name, O_EXCL | O_RDWR);
因此,这段代码的作用是尝试以 Exclusive(独占)和读写模式打开指定的设备文件,如果该文件不存在,则创建该文件。如果该文件已经存在,则不打开该文件。
注意,如果执行此代码的同时,有其它的进程或线程在执行此文件的操作,则此代码会返回错误。解决办法:
- 在执行此程序之前关闭其它进程或线程对要打开文件的操作
- 修改代码以读写模式打开:open(device_name, O_RDWR); [注意:此操作有未知风险]
- open函数创建一个文件
- device_name:这是要打开的设备文件的名称。
- O_EXCL:这是一个打开选项,表示当试图打开一个已经存在的文件时,open()函数应该引发 一个错误。这可以防止多个进程同时打开一个文件。
- O_RDWR:这是一个打开选项,表示打开文件以进行读写操作。
- O_CREAT:这是一个打开选项,表示如果文件不存在,open()函数应该创建一个新文件。
- 0666:这是一个权限掩码,表示文件应该具有的权限。这里设置了文件的用户读、写和组读、写权限。
dev = open(device_name, O_EXCL | O_RDWR | O_CREAT, 0666); /* create the file */
总之,这段代码的作用是尝试以 Exclusive(独占)读写创建模式打开一个名为device_name的设备文件,并设置权限为0666。如果文件已经存在,它将引发一个错误。
- 设置分区大小
/*计算剩余的块数*/
cblocks = (devinfo.size - part_sector * sector_size) / BLOCK_SIZE;
/*计算剩余的扇区数*/
orphaned_sectors = ((devinfo.size - part_sector * sector_size) % BLOCK_SIZE) / sector_size;
cblocks :首先,它将分区大小(devinfo.size)减去已分配的扇区数(part_sector * sector_size),然后除以块大小(BLOCK_SIZE)。结果将作为剩余的块数存储在变量cblocks中。
orphaned_sectors :首先,它将分区大小(devinfo.size)减去已分配的扇区数(part_sector * sector_size),然后取模(%),接着除以扇区大小(sector_size),最后再除以扇区大小(BLOCK_SIZE)。结果将作为剩余的扇区数存储在变量orphaned_sectors中。
- 设置文件系统参数
establish_params(&devinfo);
- 创建文档系统表
setup_tables(); /* Establish the filesystem tables */
- 将文件系统表写入磁盘
write_tables(); /* Write the filesystem tables away! */
总结
本文主要介绍了Linux中SD卡的格式化方法,在格式化SD卡时,需要注意选择正确的文件系统格式,备份重要数据并严格按照操作步骤进行,避免造成数据丢失或SD卡损坏。
2146

被折叠的 条评论
为什么被折叠?



