我一直在尝试使用其他内核(具有CAN支持)和安装的Python 3.3创建新的Raspbian映像。我认为与其在Raspberry Pi上进行所有操作,不如在计算机上进行操作(按照这些说明进行操作)会很有趣。但是,一旦挂载映像并准备就绪,我很快就会用光磁盘空间。我认为这是因为图像的大小仅够大,并且期望用户在将文件系统写入SD卡后会重新调整其大小。
在将图像和文件系统写入SD卡之前是否可以调整其大小,以便我可以做更多的自定义操作而不会耗尽空间?
我一直在尝试使用其他内核(具有CAN支持)和安装的Python 3.3创建新的Raspbian映像。我认为与其在Raspberry Pi上进行所有操作,不如在计算机上进行操作(按照这些说明进行操作)会很有趣。但是,一旦挂载映像并准备就绪,我很快就会用光磁盘空间。我认为这是因为图像的大小仅够大,并且期望用户在将文件系统写入SD卡后会重新调整其大小。
在将图像和文件系统写入SD卡之前是否可以调整其大小,以便我可以做更多的自定义操作而不会耗尽空间?
Answers:
这是如何调整原始图像文件的大小。我知道这听起来很简单,但确实可以。
创建一个空白图像,其大小要扩展原始图像(在我的示例中,我使用5GB);
dd if=/dev/zero of=/path/to/temp_image bs=1 count=1 seek=5G
将此附加到原始图像:
cat /path/to/temp_image >> /path/to/rasperrypi.img
调整位于磁盘末端的文件系统的大小(通常这是您想要更大的文件系统):
resize2fs -f /path/to/rasperrypi.img
做完了!您的磁盘现在应该更大5GB!
fdisk -l file.img
(122880)然后获得第二个分区的起始扇区开始的losetup --offset $((122880 * 512)) /dev/loop0 file.img
。然后我可以使用resize2fs
上/dev/loop0
与整理losetup -d /dev/loop0
。如果您将答案更新为包括此答案,我会将其标记为可接受的答案。感谢您指出正确的方向。
resize2fs
,/dev/loop0
但在启动时遇到内核恐慌,说超级块大小和分区大小不匹配:The filesystem size (according to the superblock) is 483840 blocks The physical size of the device is 458240 blocks
您遇到过类似的东西吗?
这是上面和其他对我有用的答案的综合-如果出现错误,请备份您的图像:
首先,将图片文件放大(在此文件末尾添加1GB):
truncate -s +1G ./image.img
接下来将整个图像映射为一个循环设备,以便我们在分区表上戳一下
sudo losetup /dev/loop0 ./image.img
为了将来参考,我们将其转储:
sudo fdisk -l /dev/loop0
输出如下:
Disk /dev/loop0: 2962 MB, 2962227200 bytes
255 heads, 63 sectors/track, 360 cylinders, total 5785600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c4661
Device Boot Start End Blocks Id System
/dev/loop0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/loop0p2 122880 5785599 2831360 83 Linux
现在,我们将删除最后一个分区,然后在相同的开始位置,相同的类型但不同的结束位置重新创建它。因此,记下loop0p2(分区2-Linux分区)的“开始”列-我们稍后将使用它-这里的122880。
sudo fdisk /dev/loop0
输入以下内容-他们可以安全输入-在您阅读以下我的解释之前,不会永久发生任何事情:
p
d
2
n
p
2
122880
p
第1步-打印当前表格。步骤2-3-删除分区2,步骤4-8-重新创建具有新端点的分区2(默认为映像的结尾),步骤9-打印出新表。
假设新打印的表与原始表相同,除了可以准备提交的End值和Blocks值(即大小已更改)。
输入w
以提交您的更改,然后输入q
以退出。
您可以删除该回送设备,我们将为第二个分区创建另一个。请记住您在上面记录和使用的起始偏移量-我们将再次使用它:
sudo losetup -d /dev/loop0 # delete the old loop setup
sudo losetup -o $((122880*512)) /dev/loop0 ./image.img
这将在/dev/loop0
指向分区2 时创建一个新的映射-参考512是您在第一个fdisk
输出中看到的扇区大小。
现在调整分区大小以填充可用空间:
sudo e2fsck -f /dev/loop0
sudo resize2fs /dev/loop0
完成-现在清理:
sudo losetup -d /dev/loop0
对于那些运行Oracle VM VirtualBox的用户来说,这很容易。
在Windows计算机上,情况如下:
input.img
是此处应减小尺寸的图像,并且output.img
是最终图像-在此示例中,该图像定义为7000 MB大。
ECHO "========================================================================="
ECHO "input.img => output.img"
ECHO "========================================================================="
DEL input.vdi
DEL output.vdi
DEL output.img
ECHO "========================================================================="
"C:\Program Files\Oracle\VirtualBox\VBoxManage" convertfromraw input.img input.vdi -format VDI --variant Standard
ECHO =========================================================================
"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename output.vdi --size 7000 --format VDI --variant Standard
ECHO =========================================================================
"C:\Program Files\Oracle\VirtualBox\VBoxManage" clonehd input.vdi output.vdi --existing
ECHO =========================================================================
"C:\Program Files\Oracle\VirtualBox\VBoxManage" clonehd output.vdi output.img --format RAW
希望这个对你有帮助。
Kernel panic - not syncing: VFS: Unable to mount rootfs on unknown-block(179,2)
这是如何调整原始图像文件的大小。我知道这听起来很简单,但确实可以。
创建一个空白图像,其大小要扩展原始图像(在我的示例中,我使用5GB);
dd if=/dev/zero of=/path/to/temp_image bs=1 count=1 seek=5G
将此附加到原始图像:
cat /path/to/temp_image >> /path/to/rpi.img
接下来是调整分区和文件系统的大小。首先,获取分区的偏移量;
fdisk -l /path/to/rpi.img
结果在这样的表中:
Device Boot Start End Sectors Size Id Type
rpi.img1 8192 122879 114688 56M c W95 FAT32 (LBA)
rpi.img2 1122880 8447999 8325120 4G 83 Linux
注意第二个分区的起始偏移量
losetup --offset $((122880 * 512)) /dev/loop0 /path/to/rpi.img
e2fsck -f /dev/loop0
resize2fs -f /dev/loop0
最后卸载/ dev / loop
losetup -d /dev/loop0
做完了!您的磁盘现在应该更大5GB!