前置作业(非常重要)
请务必!一定!绝对!要!弄清楚这篇文章的内容:建立虚拟 SD Card 映像档
然后如果对以下的指令有任何疑问,建议搭配观看:批次硬碟分割与格式化
开始练习
在前一篇文章已经学好了如何手动建立、分割、格式化、挂载虚拟映像档
再来要写一个脚本自动化完成以上那些事情
首先要先学会如何抓出对自动化脚本有用的参数,写进脚本,让脚本可以动作
加油!
如何取得自动化脚本所需要的参数(变数)
fdisk -lu sdcard.img
再来要操作如何撰写自动化脚本,要先知道分割区的起始位置,所以要把 2048 捞出来
先来看看怎么捞指令
fdisk -lu sdcard.img | grep sdcard.img
继续缩小范围
fdisk -lu sdcard.img | grep sdcard.img[0-9]
fdisk -lu sdcard.img | grep sdcard.img1
fdisk -lu sdcard.img | grep sdcard.img1 | tr -s ' '
fdisk -lu sdcard.img | grep sdcard.img1 | tr -s ' ' | cut -d\ -f 2
↑注意一下这里是两个空格,因为 \空格 是一个参数
编写自动化脚本(自动建立、分割、格式化、挂载)
现在我们可以用这串捞出来的数字来写自动化执行脚本了!
来吧废话不多说,上脚本!!
nano createsdimg.sh
SD_IMAGE=sdcard.img SD_IMAGE_SIZE=1G SD_IMAGE1=sdcard.img1 SD_IMAGE2=sdcard.img2 PART1_SIZE=100M PART1_OFFSET=1 PART1_SECTORS=1 PART1_BLOCKS=1 PART2_OFFSET=1 PART2_SECTORS=1 PART2_BLOCKS=1 LOOP0=/dev/loop0 LOOP1=/dev/loop1 LOOP2=/dev/loop2 MOUNT_DIR1=/mnt/sdcard1 MOUNT_DIR2=/mnt/sdcard2 echo "建立挂载资料夹" mkdir $MOUNT_DIR1 2>/dev/null mkdir $MOUNT_DIR2 2>/dev/null sleep 1 echo "建立完成,开始解除挂载资料夹 $MOUNT_DIR1 $MOUNT_DIR2" umount $MOUNT_DIR1 2>/dev/null umount $MOUNT_DIR2 2>/dev/null sleep 1 echo "清除连接装置 $LOOP2" losetup -d $LOOP2 2>/dev/null echo "清除连接装置 $LOOP1" losetup -d $LOOP1 2>/dev/null echo "清除连接装置 $LOOP0" losetup -d $LOOP0 2>/dev/null sleep 1 echo "建立虚拟 SD 卡 $SD_IMAGE 中" dd if=/dev/zero of=$SD_IMAGE bs=$SD_IMAGE_SIZE count=1 2>/dev/null echo "建立完成" sleep 1 echo "开始执行虚拟映像 $SD_IMAGE 的分割 (PART1: 建立脚本)..." cat > /tmp/fdisk.cmd << EOF n p 1 +$PART1_SIZE t b n p 2 w EOF echo "脚本建立完成" sleep 1 echo "开始执行虚拟映像 $SD_IMAGE 的分割 (PART2: 执行脚本)..." fdisk $SD_IMAGE < /tmp/fdisk.cmd >/dev/null echo "分割完成" sleep 1 echo "开始计算分割所需容量..." PART1_OFFSET=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE1 | tr -s ' ' | cut -d\ -f 2` PART1_SECTORS=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE1 | tr -s ' ' | cut -d\ -f 4` PART1_BLOCKS=`expr $PART1_SECTORS / 2` PART2_OFFSET=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE2 | tr -s ' ' | cut -d\ -f 2` PART2_SECTORS=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE2 | tr -s ' ' | cut -d\ -f 4` PART2_BLOCKS=`expr $PART2_SECTORS / 2` echo "计算完成" sleep 1 echo "开始将 $SD_IMAGE 连接至 $LOOP0 上" losetup $LOOP0 $SD_IMAGE echo "开始将 $SD_IMAGE1 连接至 $LOOP1 上" losetup -o `expr $PART1_OFFSET \* 512` $LOOP1 $LOOP0 echo "开始将 $SD_IMAGE2 连接至 $LOOP2 上" losetup -o `expr $PART2_OFFSET \* 512` $LOOP2 $LOOP0 # echo PART1_OFFSET=$PART1_OFFSET, PART1_BLOCKS=$PART1_BLOCKS # echo PART2_OFFSET=$PART2_OFFSET, PART2_BLOCKS=$PART2_BLOCKS sleep 1 echo "装置连接完成,执行格式化..." apt-get install dosfstools -y >/dev/null mkdosfs -s 2 $LOOP1 $PART1_BLOCKS 2>/dev/null mkfs.ext4 $LOOP2 >/dev/null sleep 1 echo "格式化完成,执行挂载..." mount $LOOP1 $MOUNT_DIR1 mount $LOOP2 $MOUNT_DIR2 echo "挂载完成。" echo ""
脚本说明
- 1 定义创建出来的虚拟映像档名称
- 2 定义虚拟映像档的容量
- 3-4 定义分割区1、2的名称
- 6 定义第一个分割区的容量
- 8-14 定义分割区1、2 Sectors 与 Blocks 的预设值
- 16-18 定义 loop 连接装置的路径
- 20-21 定义挂载资料夹的路径
- 24-25 建立最终挂载用的两个资料夹
- 32-37 如果前面有已经连接过的 loop 装置则把他们连接断开
- 41 建立虚拟映像档
- 46-60 建立分割用的 fdisk 脚本
- 64 使用刚刚建立的脚本分割虚拟映像档
- 68 计算分割区1的起始 Sector
- 69 计算分割区1的总 Sectors 数量
- 70 计算分割区1的 Blocks 数量
- 72 计算分割区2的起始 Sector
- 73 计算分割区2的总 Sectors 数量
- 74 计算分割区2的 Blocks 数量
- 78 连接虚拟映像与 /dev/loop0 装置
- 80 连接分割区1与 /dev/loop1 装置
- 82 连接分割区2与 /dev/loop2 装置
- 87 如果没有安装 dos 的格式化工具则安装
- 88-89 执行分割区1、2的格式化
- 92-93 把分割区1、2挂载到 /mnt/sdcard1、/mnt/sdcard2 上
执行自动化脚本
进入 root 权限
su -
执行这个脚本
sh createsdimg.sh
看到挂载完成了,确认一下吧!
df -h
再看一下 loop 的连接情况
losetup -a
最后看一下分割区的状况,查看有没有格式化成功
blkid /dev/loop1
blkid /dev/loop2
Latest posts by SHXJ (see all)
- 受保护的内容: NAS 版 Mathbot 管理网站与 Linebot 启动方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 数学游戏 - 2021 年 6 月 8 日










在〈自动化建立、分割、格式化、挂载虚拟映像档〉中有 1 则留言