linux下sd卡一键分区

SD卡一键单分区

1
2
sudo umount /dev/sdb* 2>/dev/null; sudo parted -s /dev/sdb mklabel msdos mkpart primary fat32 0% 100% set 1 boot on; sudo mkfs.vfat -F 32 -n SDBOOT /dev/sdb1;
udisksctl mount -b /dev/sdb1;

脚本功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
这是一个用于**格式化并挂载USB/SD卡设备**的脚本,具体功能分析如下:

## 逐行解析

### 1. 卸载分区
```bash
sudo umount /dev/sdb* 2>/dev/null;
```
- 卸载所有 `/dev/sdb` 开头的分区(sdb1、sdb2等)
- `2>/dev/null` 隐藏错误信息(如未挂载的分区报错)
- **作用**:确保目标磁盘没有挂载的分区,避免后续操作冲突

### 2. 创建分区表与分区
```bash
sudo parted -s /dev/sdb mklabel msdos mkpart primary fat32 0% 100% set 1 boot on;
```
- `-s`:静默模式,不提示确认
- `mklabel msdos`:创建MS-DOS(MBR)分区表
- `mkpart primary fat32 0% 100%`:创建主分区,使用整个磁盘空间,文件系统标记为fat32
- `set 1 boot on`:设置第一个分区为可引导(活动分区)

### 3. 格式化分区
```bash
sudo mkfs.vfat -F 32 -n SDBOOT /dev/sdb1;
```
- `-F 32`:使用FAT32文件系统
- `-n SDBOOT`:设置卷标为"SDBOOT"
- 格式化第一个分区为FAT32

### 4. 挂载分区
```bash
udisksctl mount -b /dev/sdb1
```
- 使用udisksctl工具挂载设备
- 通常在`/media/用户名/`目录下创建挂载点
- 无需root权限(udisksctl允许普通用户挂载)

## 脚本整体目的

,**创建可引导的FAT32启动盘**,通常用于:
- BIOS/UEFI启动盘制作
- 系统安装盘(如Windows/Linux安装介质)
- 嵌入式设备(如树莓派)的启动卡

## 注意事项

?? **警告**- 操作目标为 `/dev/sdb`,请确认这是目标设备而非系统盘
- 会**完全擦除**该设备上的所有数据
- 建议先用 `lsblk``fdisk -l` 确认设备路径正确

SD卡一键双分区

1
2
3
4
5
6
7
8
9
sudo umount /dev/sdb* 2>/dev/null; \
sudo parted -s /dev/sdb mklabel msdos \
     mkpart primary fat32 1MiB 101MiB \
     mkpart primary ext4 101MiB 100% \
     set 1 boot on; \
sudo mkfs.vfat -F 32 -n SDBOOT /dev/sdb1; \
sudo mkfs.ext4 -F -L SDROOT /dev/sdb2
udisksctl mount -b /dev/sdb1;
udisksctl mount -b /dev/sdb2;

脚本功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
这是一个用于初始化SD卡或USB存储设备(`/dev/sdb`)的分区创建和格式化脚本。以下是对其功能的逐段分析:

## 脚本功能分解

### 1. **卸载现有分区**
```bash
sudo umount /dev/sdb* 2>/dev/null;
```
- 卸载 `/dev/sdb` 上所有已挂载的分区
- `2>/dev/null` 忽略错误输出(如没有挂载分区的情况)
- 为后续操作准备干净的设备状态

### 2. **创建分区表**
```bash
sudo parted -s /dev/sdb mklabel msdos \
     mkpart primary fat32 1MiB 101MiB \
     mkpart primary ext4 101MiB 100% \
     set 1 boot on;
```
- `-s`:非交互模式
- `mklabel msdos`:创建MS-DOS(MBR)分区表
- 创建两个主分区:
  - **分区1**:FAT32格式,起始1MiB,结束101MiB(大小约100MB)
  - **分区2**:ext4格式,起始101MiB,占用剩余全部空间
- `set 1 boot on`:将第一个分区标记为可引导(设置boot flag)

### 3. **格式化分区1(引导分区)**
```bash
sudo mkfs.vfat -F 32 -n SDBOOT /dev/sdb1;
```
- 创建FAT32文件系统
- `-F 32`:明确指定FAT32格式
- `-n SDBOOT`:设置卷标为"SDBOOT"
- 用途:通常作为引导分区(如Linux系统的/boot或UEFI引导)

### 4. **格式化分区2(根文件系统分区)**
```bash
sudo mkfs.ext4 -F -L SDROOT /dev/sdb2
```
- 创建ext4文件系统
- `-F`:强制格式化(跳过确认)
- `-L SDROOT`:设置卷标为"SDROOT"
- 用途:作为根文件系统分区(存储操作系统和用户数据)

### 5. **挂载分区**
```bash
udisksctl mount -b /dev/sdb1;
udisksctl mount -b /dev/sdb2;
```
- 使用udisksctl工具(用户空间磁盘管理工具)挂载两个分区
- 自动挂载到 `/media/用户名/卷标名/` 目录(通常)
- 相比直接mount命令,更适合桌面环境

## 典型应用场景

这个脚本通常用于:
- **嵌入式Linux系统**:如树莓派、BeagleBone等开发板的SD卡准备
- **双分区Linux安装盘**:FAT32分区存放引导加载程序,ext4分区存放根文件系统
- **便携式Linux系统**:创建可引导的Linux系统盘

## 注意事项

1. **危险操作**:脚本直接操作 `/dev/sdb`,如果误识别设备会清空重要数据
2. **没有检查**:未先验证目标设备是否正确,建议添加确认步骤
3. **分区大小**:引导分区固定100MB,对于某些现代引导程序可能偏小
4. **MBR限制**:使用msdos分区表,无法支持大于2TB的磁盘或UEFI启动(需要GPT)

## 改进建议

```bash
# 添加设备确认
echo "Warning: This will erase /dev/sdb. Continue? (y/n)"
read confirm
if [ "$confirm" != "y" ]; then exit; fi

# 或者使用更安全的变量
DEVICE="/dev/sdb"
```

这个脚本是一个典型的Linux系统盘初始化工具,简洁高效,但需要谨慎使用。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计