STC214/使用QEMU扩展树莓派镜像增加剩余使用空间

Created Sat, 06 Feb 2021 02:02:39 +0800 Modified Sat, 06 Feb 2021 02:02:39 +0800
1531 Words

原文链接:

https://blog.csdn.net/talkxin/article/details/81264605             
https://blog.csdn.net/weixin_34124939/article/details/92783554    

前言

  当我们使用qemu加载了一个树莓派官方镜像时,因为官方在构建镜像的时候人为的控制了root分区的大小,如果我们加载完镜像需要进行一些自己的操作时,就需要使用qemu-img工具来扩容空间啦。
1、检查树莓派镜像

  首先,我们检查一下现有树莓派镜像的空间,使用qemu-img的info命令:

qemu-img info 2017-11-29-raspbian-stretch.img

如果找不到qemu-img命令的话需要安装对应的qemu版本

  
 通过 sudo apt-get install qemu 命令安装过qemu后,在terminal输入qemu显示如下:  
  
   
  
    znn@znn-virtual-machine:~$ qemu   
    No command 'qemu' found, did you mean:   
     Command 'qtemu' from package 'qtemu' (universe)   
     Command 'aqemu' from package 'aqemu' (universe)   
    qemu: command not found   
  
   
  
转至usr/bin目录,输入q,按tab键匹配有:  
  
    znn@znn-virtual-machine:/usr/bin$ q   
    qdbus               qemu-ifup           qemu-system-i386    quirks-handler   
    qemu-ga             qemu-img            qemu-system-x86_64  quote   
    qemu-i386           qemu-io             qemu-x86_64         quote_readline   
    qemu-ifdown         qemu-nbd            qpdldecode       
  
   
解决方案:  
  
使用qemu-system-i386或qemu-system-x86_64指令替换qemu指令。  
可以建立一条软链接,这样就还可以使用qemu命令了:  
> sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu   
  

经过如上设置之后就可以正常使用命令了

首先,我们检查一下现有树莓派镜像的空间,使用qemu-img的info命令:

qemu-img info 2017-11-29-raspbian-stretch.img

  输出可以看到如下信息:

image: 2017-11-29-raspbian-stretch.img//img镜像名称
file format: raw//文件格式类型
virtual size: 4.6G (4919918592 bytes)//实际镜像文件大小
disk size: 4.6G//系统空间大小

2、扩容IMG镜像文件

  使用qemu-img的resize命令对镜像文件进行扩展。

qemu-img resize 2017-11-29-raspbian-stretch.img +1G

  再通过info命令检查当前镜像文件:

file format: raw
virtual size: 5.6G (5993660416 bytes)//实际镜像文件大小已经扩容1G空间
disk size: 4.6G

  现在实际镜像文件已经扩容,但实际文件系统暂时还未识别已扩容的空间,需要对该虚拟分区进行格式化。
  通过resize命令不仅可以扩展镜像大小,也可以对镜像进行裁剪,但裁剪之前需要对分区进行格式化并释放空间,否则裁剪时会损坏镜像。

每个树莓派镜像的分区默认有两个,sda1【boot分区】与sda2【linux分区】,此次扩容只对linux分区进行扩容。  

3、启动镜像进入linux分区

  扩展完毕后,进入镜像的linux系统中,通过df -h命令查看当前系统文件大小,可以看到当前系统还未识别新扩展的空间,可以看到linux分区几乎已经用光:

Filesystem Size Used Avail Use% Mounted on
/dev/root 4.5G 4.1G 98M 98% /
devtmpfs 124M 0 124M 0% /dev
tmpfs 124M 0 124M 0% /dev/shm
tmpfs 124M 1.9M 122M 2% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 124M 0 124M 0% /sys/fs/cgroup
/dev/sda1 41M 21M 21M 51% /boot
tmpfs 25M 0 25M 0% /run/user/1000

  使用fdisk命令查看当前分区的起始位与结束位:

sudo fdisk -l

  可以看到如下内容:

Device Boot Start End Sectors Size Id Type
/dev/sda1 8192 93236 85045 41.5M c W95 FAT32 (LBA)
/dev/sda2 94208 9609215 9515008 4.6G 83 Linux

  需要记录sda2(Linux分区)的start位置的sector。

  使用fdisk对sda设备进行分区:

sudo fdisk /dev/sda

可以输入m来进行查看fdisk的命令,如果想退出可以输入q  

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d #删除分区指令
Partition number (1,2, default 2): 2 #2即sda2分区

Partition 2 has been deleted.

Command (m for help): n #创建新分区
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p #创建主分区
Partition number (2-4, default 2): 2 #创建sda2分区
First sector (2048-11706367, default 2048): 94208 #输入sda2分区起始sector
Last sector, +sectors or +size{K,M,G,T,P} (94208-11706367, default 11706367): 11706367 #默认镜像最后一个sector

Created a new partition 2 of type ‘Linux’ and of size 5.6 GiB.
Partition #2 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: N #此时已经扩展成功,选择不删除分区签名

Command (m for help): w #保存此次操作

The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

4、重启检查系统剩余空间

  此时已经完成了对Linux分区的扩展,使用sudo reboot命令重启qemu。重启完成后使用resize2fs命令来时我们扩展的空间生效。

sudo resize2fs /dev/sda2

  然后通过df -h命令来检查系统剩余空间:

Filesystem Size Used Avail Use% Mounted on
/dev/root 5.4G 4.1G 1.1G 80% /
devtmpfs 124M 0 124M 0% /dev
tmpfs 124M 0 124M 0% /dev/shm
tmpfs 124M 2.0M 122M 2% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 124M 0 124M 0% /sys/fs/cgroup
/dev/sda1 41M 21M 21M 51% /boot
tmpfs 25M 0 25M 0% /run/user/1000

  此时可以看到对linux分区扩展的空间已经生效。