dd fdisk mount相关命令的总结

本文总结了dd, fdisk, mount这三个命令的常用参数和实际操作,包括如何使用dd制作镜像,fdisk进行磁盘分区,以及mount命令在挂载文件系统中的应用。内容涵盖制作BPI_M3_1080P.img.gz镜像文件,以及烧录到SD卡的过程。" 106980162,8567703,图的DFS与BFS遍历,"['图论', '算法', '数据结构']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概论
工作中经常会碰到dd fdisk mount这些命令,比如这段时间玩banana-pi,在生成镜像和制作启动卡,会经常用到dd fdisk mount这些命令。

常用参数
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

制作镜像

#!/bin/bash

#gunzip -c BPI_M3_1080P.img.gz | dd of=/dev/mmcblk0 conv=sync,noerror bs=1k

die() {
        echo "$*" >&2
        exit 1
}

[ -s "./env.sh" ] || die "please run ./configure first."
. ./env.sh
O=$1

if [ ! -z $O ] ; then
        BOARD=$O
fi

P=${TOPDIR}/output/$BOARD/pack
U=${TOPDIR}/output/100MB
#echo DOWNLOAD DIR=$P

mkdir -p $U
TMP_FILE=${U}/${BOARD}.tmp
IMG_FILE=${U}/${BOARD}.img
#先制作一个大小为100M的${TMP_FILE}的文件,然后将其和伪设备关联起来
(sudo dd if=/dev/zero of=${TMP_FILE} bs=1M count=100) >/dev/null 2>&1
LOOP_DEV=`sudo losetup -f --show ${TMP_FILE}`
#将boot0_sdcard.fex复制到${TMP_FILE}文件的8KB处
(sudo dd if=$P/boot0_sdcard.fex of=${LOOP_DEV} bs=1k seek=8) >/dev/null 2>&1
(sudo dd if=$P/u-boot.fex       of=${LOOP_DEV} bs=1k seek=19096) >/dev/null 2>&1
(sudo dd if=$P/sunxi_mbr.fex    of=${LOOP_DEV} bs=1k seek=20480) >/dev/null 2>&1
(sudo dd if=$P/boot-resource.fex of=${LOOP_DEV} bs=1k seek=36864) >/dev/null 2>&1
(sudo dd if=$P/env.fex          of=${LOOP_DEV} bs=1k seek=69632) >/dev/null 2>&1
#(sudo dd if=$P/boot.fex        of=${LOOP_DEV} bs=1k seek=86016) >/dev/null 2>&1

sudo sync

sudo losetup -d ${LOOP_DEV}
#从${TMP_FILE}8kb处复制总共复制102392kb,刚好会使${IMG_FILE}的大小为100M
(dd if=${TMP_FILE} of=${IMG_FILE} bs=1024 skip=8 count=102392 status=noxfer) >/dev/null 2>&1

rm -f ${IMG_FILE}.gz
echo "gzip ${IMG_FILE}"
gzip ${IMG_FILE}
rm -f ${TMP_FILE}

这个脚本是将boot0_sdcard.fex u-boot.fex sunxi_mbr.fex boot-resource.fex env.fex这几个文件制作成BPI_M3_1080P.img.gz(经过gzip压缩后的镜像文件)

烧录镜像
下面这个命令是基于上面命令生成的镜像文件烧录到SD卡

sudo gunzip -c BPI_M3_1080P.img.gz  | dd of=/dev/sdb bs=1024 seek=8

下面这些命令实质上是上面所有命令的一个本质上的解释。

#!/bin/sh
#从这里可以看出204800x512byte=100M该空间为启动程序用的空间
# make partition table by fdisk command
# reserve part for fex binaries download 0~204799
# partition1 /dev/sdc1 vfat 204800~327679
# partition2 /dev/sdc2 ext4 327680~end

die() {
        echo "$*" >&2
        exit 1
}

[ $# -eq 1 ] || die "Usage: $0 /dev/sdc"

[ -s "./env.sh" ] || die "please run ./configure first."

. ./env.sh

O=$1
P=../output/$BOARD/pack

sudo dd if=$P/boot0_sdcard.fex  of=$O bs=1k seek=8
sudo dd if=$P/u-boot.fex        of=$O bs=1k seek=19096
sudo dd if=$P/sunxi_mbr.fex     of=$O bs=1k seek=20480
sudo dd if=$P/boot-resource.fex of=$O bs=1k seek=36864
sudo dd if=$P/env.fex           of=$O bs=1k seek=69632
#sudo dd if=$P/boot.fex                 of=$O bs=1k seek=86016

fdisk分区
实际上基于上面烧录的操作之前,我们首先应该将 SD卡进行分区,每个磁盘分区的前512bytes为磁盘的分区信息。分区完成后,一般得mkfs.vfat mkfs.ext4等命令来格式对应的分区,比如上面情况为

mkfs.vfat /dev/sdb1
mkfs.ext4 /dev/sdb2

mount命令
mount命令,自行搜索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值