SDカードimgファイルを作成し、拡張する

11915 ワード

/**********************************************************************************
 *          raspi-config Expand root partition to fill SD card   
 *   :
 *                SD    ,      。
 *                              
 *                                              2017-2-20             
 ********************************************************************************/

 、    :
    1. Raspbian: how to resize the root partition to fill SD card
        https://coderwall.com/p/mhj8jw/raspbian-how-to-resize-the-root-partition-to-fill-sd-card
    2. raspi-config
        https://github.com/asb/raspi-config/blob/master/raspi-config
    3. Making a bootable .img image file
        http://www.orangepi.org/Docs/Makingabootable.html
    4. Setting up the Linux distribution root file system
        http://www.orangepi.org/Docs/SettinguptheLinux.html
    5. Bootable SD card
        http://sunxi.org/Bootable_SD_card#Cleaning

 、raspi-config       SD       :

    do_expand_rootfs() {
      # -h : FILE exists and is a symbolic link (same as -L)
      if ! [ -h /dev/root ]; then
        whiptail --msgbox "/dev/root does not exist or is not a symlink. Don't know how to expand" 20 60 2
        return 0
      fi
    
      # readlink              。 
      ROOT_PART=$(readlink /dev/root)
      #    $string   ,       $substring   
      PART_NUM=${ROOT_PART#mmcblk0p}
      if [ "$PART_NUM" = "$ROOT_PART" ]; then
        whiptail --msgbox "/dev/root is not an SD card. Don't know how to expand" 20 60 2
        return 0
      fi
    
      # NOTE: the NOOBS partition layout confuses parted. For now, let's only 
      # agree to work with a sufficiently simple partition layout
      if [ "$PART_NUM" -ne 2 ]; then
        whiptail --msgbox "Your partition layout is not currently supported by this tool. You are probably using NOOBS, in which case your root filesystem is already expanded anyway." 20 60 2
        return 0
      fi

      #                      
      # 
      # shell script:
      #   root@zengjf:/home/zengjf/hacking# parted /dev/sdb -ms unit s p 
      #   BYT;
      #   /dev/sdb:1953525168s:scsi:512:4096:gpt:ATA ST1000LM035-1RK1:;
      #   1:2048s:943720448s:943718401s:ntfs:Basic data partition:msftdata;
      #   2:943722496s:1953523711s:1009801216s:ntfs:Basic data partition:msftdata;
      LAST_PART_NUM=$(parted /dev/mmcblk0 -ms unit s p | tail -n 1 | cut -f 1 -d:)
      if [ "$LAST_PART_NUM" != "$PART_NUM" ]; then
        whiptail --msgbox "/dev/root is not the last partition. Don't know how to expand" 20 60 2
        return 0
      fi
    
      # Get the starting offset of the root partition
      #             
      PART_START=$(parted /dev/mmcblk0 -ms unit s p | grep "^${PART_NUM}" | cut -f 2 -d:)
      [ "$PART_START" ] || return 1
      # Return value will likely be error for fdisk as it fails to reload the
      # partition table because the root fs is mounted
      fdisk /dev/mmcblk0 <<EOF
    p
    d
    $PART_NUM
    n
    p
    $PART_NUM
    $PART_START

    p
    w
    EOF
      ASK_TO_REBOOT=1
    
      # now set up an init.d script
    cat < /etc/init.d/resize2fs_once &&
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          resize2fs_once
    # Required-Start:
    # Required-Stop:
    # Default-Start: 2 3 4 5 S
    # Default-Stop:
    # Short-Description: Resize the root filesystem to fill partition
    # Description:
    ### END INIT INFO
    . /lib/lsb/init-functions
    case "$1" in
      start)
        log_daemon_msg "Starting resize2fs_once" &&
        resize2fs /dev/root &&                       #          
        rm /etc/init.d/resize2fs_once &&             #     ,            
        update-rc.d resize2fs_once remove &&
        log_end_msg $?
        ;;
      *)
        echo "Usage: $0 start" >&2
        exit 3
        ;;
    esac
    EOF
      chmod +x /etc/init.d/resize2fs_once &&         #          
      update-rc.d resize2fs_once defaults &&         #     
      if [ "$INTERACTIVE" = True ]; then
        whiptail --msgbox "Root partition has been resized.
The filesystem will be enlarged upon the next reboot
" 20 60 2 fi } 、 、 、 、 : zengjf@zengjf:~/zengjf/mksdImageFile$ sudo parted /dev/sdc -ms unit s p BYT; /dev/sdc:3887104s:scsi:512:512:msdos:NORELSYS 1081:; 1:2048s:43007s:40960s:fat16::; 2:43008s:204799s:161792s:ext4::; 、resizefs : zengjf@zengjf:/media/zengjf/e09b9d90-3b63-43fa-9b31-485e153c3ccb$ sudo resize2fs /dev/sdc2 resize2fs 1.43.3 (04-Sep-2016) /dev/sdc2 /media/zengjf/e09b9d90-3b63-43fa-9b31-485e153c3ccb; old_desc_blocks = 1, new_desc_blocks = 15 /dev/sdc2 1922048 ( 1k)。