期末考大補帖

這是一個可以建立三個分割區的腳本,三個分割區分別是:

  1. 放 kernel 以及 u-boot 的分區
  2. 放 rootfs 的分區
  3. SWAP

根據考試內容 (假設他考的是三個分割區且第三分割區為 SWAP),需要修改的有幾個地方

程式碼第 1 行: SD_IMAGE – SD 卡的名稱
程式碼第 6 行: SD_IMAGE_SIZE – SD卡總容量
程式碼第 7 行: PART1_SIZE: 第一個分區(放 kernel 跟 uboot 的地方)容量
程式碼第 8 行: PART2_SIZE: 第二個分區(放 rootfs 的地方)容量

SD_IMAGE=sdcard4.img
SD_IMAGE1=${SD_IMAGE}1
SD_IMAGE2=${SD_IMAGE}2
SD_IMAGE3=${SD_IMAGE}3
SD_IMAGE_SIZE=150M
PART1_SIZE=10M
PART2_SIZE=120M
PART1_OFFSET=1
PART1_SECTORS=1
PART1_BLOCKS=1
PART2_OFFSET=1
PART2_SECTORS=1
PART2_BLOCKS=1
SWAP_OFFSET=1
SWAP_SECTORS=1
SWAP_BLOCKS=1
LOOP0=/dev/loop0
LOOP1=/dev/loop1
LOOP2=/dev/loop2
LOOP3=/dev/loop3
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 "清除連接裝置 $LOOP3"
losetup -d $LOOP3 2>/dev/null
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 "更改使用者權限"
chown eecs:eecs $SD_IMAGE
echo "開始執行虛擬映像 $SD_IMAGE 的分割 (PART1: 建立腳本)..."
cat > /tmp/fdisk.cmd << EOF
n
p
1
+$PART1_SIZE
t
b
n
p
2
+$PART2_SIZE
n
p
3
t
3
82
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`
PART3_OFFSET=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE3 | tr -s ' ' | cut -d\  -f 2`
PART3_SECTORS=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE3 | tr -s ' ' | cut -d\  -f 4`
PART3_BLOCKS=`expr $PART3_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 "開始將 $SD_IMAGE3 連接至 $LOOP3 上"
losetup -o `expr $PART3_OFFSET \* 512` $LOOP3 $LOOP0
# echo PART1_OFFSET=$PART1_OFFSET, PART1_BLOCKS=$PART1_BLOCKS
# echo PART2_OFFSET=$PART2_OFFSET, PART2_BLOCKS=$PART2_BLOCKS
sleep 1
echo "裝置連接完成,執行格式化..."
mkdosfs -s 2 $LOOP1 $PART1_BLOCKS 2>/dev/null
mkfs.ext4 -O ^metadata_csum,^64bit $LOOP2 $PART2_BLOCKS >/dev/null
sleep 1
echo "格式化完成,執行掛載..."
mount $LOOP1 $MOUNT_DIR1
mount $LOOP2 $MOUNT_DIR2
echo "掛載完成。"
echo ""
SHXJ
Latest posts by SHXJ (see all)

發佈留言