Linux中SD卡格式化总结

提示:dosftools工具资源已放入文章中


前言

在Linux中,对SD卡进行格式化是一项非常重要的技能。无论是开发人员、系统管理员还是普通用户,都需要掌握这一技能。本篇文章将介绍Linux中对SD卡进行格式化的步骤和注意事项。


一,SD卡简介

SD卡是Secure Digital卡的缩写,是一种小型的存储设备,是一种无旋转部件、可随身携带的固态存储卡。SD卡分为标准SD卡和microSD卡两种类型,其中microSD卡是一种更小型的SD卡。SD卡是一种十分方便的存储设备,便于携带、读写速度快、容量大等特点使它成为了许多移动设备上常用的存储介质。

二,SD卡文件系统

SD卡可以使用多种文件系统进行格式化,常见的格式包括:

  1. FAT32:这是一种广泛支持的文件系统,适用于多个操作系统包括Windows、Mac和Linux。它支持较大的文件存储和兼容性,但单个文件大小受到4GB限制。
  2. exFAT:这是一个用于大容量存储设备的文件系统,可支持非常大的文件和存储容量。它提供了更好的兼容性和文件大小限制比FAT32更高。
  3. NTFS:这是Windows操作系统最常用的文件系统,支持大容量存储和较大的文件大小,但对于非Windows系统的兼容性较差。
  4. ext4:这是Linux上最常用的文件系统,支持大容量存储和较大的文件大小,同时具备稳定性、性能和安全性。

选择适当的文件系统格式取决于你的需求和所使用的操作系统。如果需要在多个操作系统之间共享SD卡,可以选择FAT32或exFAT。如果主要在Linux系统中使用SD卡,可以选择ext4文件系统。如果只在Windows系统中使用,则可以选择NTFS。

三,SD卡格式化方式

1.使用格式化命令

请注意,格式化SD卡将清除其上的所有数据,请在操作之前备份重要数据。

  1. 确定SD卡的设备路径。运行以下命令:
fdisk -l

找到对应SD卡的设备路径,一般以/dev/sdX(其中X为字母)命名。

  1. 卸载SD卡。如果SD卡已经挂载(自动挂载),请运行以下命令卸载它(请将/dev/sdX替换为实际设备路径):
umount /dev/sdX
  1. 格式化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文件系统,并提供了以下主要工具:

  1. mkfs.fat:用于创建新的FAT文件系统。
  2. fsck.fat:用于检查和修复FAT文件系统的一致性。
  3. dosfsck:是fsck.fat的旧版名称,现已废弃。
  4. fatsort:用于对FAT文件系统中的文件进行排序。
  5. fsck.msdos:用于检查和修复FAT12/FAT16文件系统。

dosfstools是在Linux系统上操作FAT文件系统的主要工具之一。它可以帮助用户在Linux上创建、修复和维护与DOS和Windows兼容的SD卡、U盘等可移动存储设备上的FAT文件系统。

当使用dosfstools时,可以通过命令行工具来执行各种操作。以下是dosfstools的几个常用命令及其用法:

  1. 创建DOS/FAT文件系统:
    使用mkfs.fat命令可以创建DOS/FAT文件系统。以下是创建FAT32文件系统的示例命令:

    mkfs.fat -F 32 /dev/sdb1
    

    这将在/dev/sdb1设备上创建一个FAT32文件系统。

  2. 检查和修复DOS文件系统:
    使用fsck.fat命令可以检查和修复DOS文件系统的一致性。以下是检查并修复文件系统的示例命令:

    fsck.fat -a /dev/sdb1
    

    这将检查并自动修复/dev/sdb1设备上的DOS文件系统。

  3. 设置或获取DOS文件系统的卷标:
    使用dosfslabel命令可以设置或获取DOS文件系统的卷标。以下是设置卷标的示例命令:

    dosfslabel /dev/sdb1 MYLABEL
    

    这将为/dev/sdb1设备上的文件系统设置卷标为MYLABEL

  4. 检查和修复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)
  1. open函数打开一个文件,它需要两个参数:文件名和打开模式。
    • device_name是设备文件的名称
    • O_EXCL表示如果文件已经存在,则不打开该文件。这可以确保不会覆盖现有文件的内容。
    • O_RDWR表示以读写模式打开文件。这意味着可以同时读取和写入文件。
dev = open(device_name, O_EXCL | O_RDWR);

因此,这段代码的作用是尝试以 Exclusive(独占)和读写模式打开指定的设备文件,如果该文件不存在,则创建该文件。如果该文件已经存在,则不打开该文件。

注意,如果执行此代码的同时,有其它的进程或线程在执行此文件的操作,则此代码会返回错误。解决办法:

  • 在执行此程序之前关闭其它进程或线程对要打开文件的操作
  • 修改代码以读写模式打开:open(device_name, O_RDWR); [注意:此操作有未知风险]
  1. 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。如果文件已经存在,它将引发一个错误。

  1. 设置分区大小
/*计算剩余的块数*/
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中。

  1. 设置文件系统参数
establish_params(&devinfo);	
  1. 创建文档系统表
setup_tables();		/* Establish the filesystem tables */
  1. 将文件系统表写入磁盘
write_tables();		/* Write the filesystem tables away! */

总结

本文主要介绍了Linux中SD卡的格式化方法,在格式化SD卡时,需要注意选择正确的文件系统格式,备份重要数据并严格按照操作步骤进行,避免造成数据丢失或SD卡损坏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值