我想为一些朋友准备一个发行版。
由于周围没有其他东西,我使用了16Gb SD卡。
我从默认的Debian Weezy 2Gb映像开始,没有进行任何大小调整。
现在,完成操作后,我想创建一个镜像,但是我得到了一个16Gb文件,最后包含14Gb的未分区(非分区和可用 空间)空间。
[我使用Windows // Win32DiskImager,因为我现在没有空余时间可以粘贴到rPI中]
我可以直接在分区空间后面截断图像文件,然后将前导部分转移到较小的卡上吗?
我想为一些朋友准备一个发行版。
由于周围没有其他东西,我使用了16Gb SD卡。
我从默认的Debian Weezy 2Gb映像开始,没有进行任何大小调整。
现在,完成操作后,我想创建一个镜像,但是我得到了一个16Gb文件,最后包含14Gb的未分区(非分区和可用 空间)空间。
[我使用Windows // Win32DiskImager,因为我现在没有空余时间可以粘贴到rPI中]
我可以直接在分区空间后面截断图像文件,然后将前导部分转移到较小的卡上吗?
Answers:
我终于找到了可以解释我的问题的资源。
短:
是的,可以截断!
流程摘要:
使用fdisk
以下命令从映像中提取分区信息:
$ fdisk -lu image.img
Disk image.img: 4096 MB, 4096000000 bytes, 8000000 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: 0x000a1bc7
Device Boot Start End Blocks Id System
image.img1 2048 5872026 5869978 b W95 FAT32
我们看到,该分区的大小约为2.8Gb(5872026 * 512),其余部分未分区。
因此,分区结束后的所有内容都可以删除。
这将通过该工具完成truncate
。不要忘记在扇区数上加1,因为块数从0开始。
$ truncate --size=$[(5872026+1)*512] image.img
对于那些过于懒惰切换到Linux:
同样适用于Windows用的Cygwin的fdisk.exe
和truncate.exe
!
什么是Cygwin?
我可能会引用:“ Cygwin:在Windows上获得Linux的感觉”(https://www.cygwin.com/)。
它是一组可执行程序,可以在Windows下运行,但是提供您通常从Linux知道的所有命令行程序。如果在安装过程中选择了每个软件包,Cygwin的安装将花费很长时间,但是要遵循此示例,只需确保除了默认配置外,还选择了软件包util-linux
(fdisk)和coreutils
(truncate)。
根据你的环境,你的男人需要补充/usr/bin
和/usr/sbin
你的$PATH
。
fdisk.exe
和truncate.exe
?
我知道这是一个老问题,但是我想展示如何在Mac上执行此过程,因为它并不那么简单:fdisk
没有该-l
选项,并且truncate
默认情况下未安装:
为此,您需要MacPorts或Homebrew。我使用MacPorts。如果您没有这些,请先安装它们。链接到MacPorts
现在,我们可以安装truncate。打开您的终端并输入:
sudo port install truncate
对于Brew安装:
brew install truncate
这应该做。
稍后您将看到我们为什么需要此步骤。打开“磁盘工具”应用程序。单击文件 (在顶部栏上) ->打开磁盘映像,然后选择您的IMG文件。
在终端上,键入:
diskutil list
它应该在最后某个地方显示出这样的内容:
/dev/disk3 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme +16.0 GB disk3
1: Windows_FAT_32 boot 62.9 MB disk3s1
2: Linux 3.9 GB disk3s2
因此,我们看到大约有12GB未分区。我们需要截断那些。
我们需要此命令的原因是检查磁盘映像的安装位置。就我而言,它位于:/ dev / disk3下
3.9 GB和62.9 MB是不适用于截断的值。我们需要找到以字节为单位的分区大小。
在您的终端中,运行以下命令:
fdisk /dev/diskX
其中X是您在上一步中发现的数量。这应该导致如下结果:
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 0C 0 130 3 - 8 40 32 [ 8192 - 122880] Win95 FAT32L
2: 83 8 40 33 - 478 79 49 [ 131072 - 7553024] Linux files*
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
在终端上,cd
转到图像所在的目录。然后写:
truncate FILE SIZE
FILE是您的文件。
SIZE是字节大小。我所做的就是在命令的size列中添加start列,然后乘以512。因此,在我的情况下,SIZE为:512 *(7553024 + 131072)= 3934257152,大约3.9 GB。fdisk
您将需要开始和大小的的最后一个分区是由所示fdisk
。(不一定是最大的,而是IMG文件末尾的那个)
我做了一些实验,每当我输入7553024 * 512或(7553024 +1)* 512字节时,IMG文件就会损坏。因此,请确保按照我上面的指示进行操作。它可能会增加实际所需的数量,但这是一个安全的选择。
在“磁盘工具”中再次进入,然后尝试像以前一样打开新的IMG文件。如果已安装,您还可以看到新的(较小的)尺寸。如果未安装,则出了点问题。(也许尝试在truncate
命令中增加大小)
这不是最佳测试,但这是检查新IMG是否损坏的可靠方法。因此,不要指望它,但是值得一试...
我希望有人觉得这有帮助!
512*(Size+1)
是行不通的。如您所见,我使用End
而不是Size
,因为如果有多个分区,则必须保留两个分区。因此,使用7553024 + 131072
(+1
)是100%正确!
这是我最近注意到的事情,因为我做了很多Win32diskimg操作来备份RPI映像以进行部署。我最近开始测试SD“修整”功能,以清洁SD卡中未用于理论磨损平衡的部件。不知道它会产生什么效果,但是有一个副作用是当我对16GB SD分区进行映像,然后使用7zip对其进行压缩时。我从通常的16GB增加到9.5GB,现在变成了2.5GB。我现在正在测试以确保没有问题,但是使用TRIM将未使用的空间标记为0似乎使图像压缩更加有效(这确实很有意义)。只是想报告这一点非常容易完成,没有多个步骤。
dd if=/dev/path/to/SD/card of=~/SpecialImage.img
,然后安装GParted并运行gparted ~/SpecialImage.img
。GParted打开.img
文件后,只需根据您的喜好调整分区大小即可!(这两个命令都必须以root用户身份运行,sudo su
才能获得所需的东西。$
切换到a时#
,您就是Root。请注意,这等效于Linux的God。)GParted基本上是用于神秘分区管理的GUI前端。您需要的工具。使用GParted会使一切变得更加简单和成功。