我正在尝试使用 dd 实用程序创建 Live USB。我做的第一件事是使用以下命令擦除 USB:
~ $ dd if=/dev/zero of=/dev/sdb bs=512 count=1
根据命令可知,8GB USB 的总内存为 7.6GB。
~ $ fdisk -l
...
Disk /dev/sdb: 7.6 GiB, 8097103872 bytes, 15814656 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
问题是执行“dd”操作将ISO写入USB后,分区不会占用整个磁盘空间。
我运行此命令会生成后续输出。
~ $ sudo dd if=kali-linux-2016.2-amd64.iso of=/dev/sdb bs=1M
2934+1 records in
2934+1 records out
3076767744 bytes (3.1 GB, 2.9 GiB) copied, 395.581 s, 7.8 MB/s
然后,我再次运行 fdisk 命令,生成此输出。
Disk /dev/sdb: 7.6 GiB, 8097103872 bytes, 15814656 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
Disklabel type: dos
Disk identifier: 0x77e6cfe3
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 64 5794271 5794208 2.8G 17 Hidden HPFS/NTFS
/dev/sdb2 5794272 6009311 215040 105M 1 FAT12
请注意顶行显示 7.6GiB 内存,但分区仅分别占用 2.8GB 和 105M。即使当我分析 gparted 中的分区时,它也只显示这两个分区,并且不会列出 USB 记忆棒上的任何额外空间。
我在这里缺少什么吗?
更新
我对设备上没有剩余空间的假设是错误的。我在下面用我用来利用磁盘上剩余空间的命令回答了我的问题。
答案1
dd 实用程序读取和写入块,而不考虑这些块的内容;它的运行级别低于分区。在这种情况下,您正在编写一个图像,并且该图像仅包含两个具有固定大小的分区。块的大小大约只有 2.9GB,因此较大的磁盘只会写入这些块。
有一篇关于分区表如何工作的不错的文章http://wiki.osdev.org/Partition_Table等地方。简而言之,该表列出了每个分区的开始位置以及每个分区的大小。
答案2
所以事实证明空间是存在的,只是没有显示在 gparted 中。
对于任何未来的用户,这里是我用来利用额外空间的一系列命令。
~ $ parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print devices
/dev/sda (128GB)
/dev/sdb (8097MB)
(parted) select /dev/sdb
Using /dev/sdb
(parted) print
Model: hp v195b (scsi)
Disk /dev/sdb: 8097MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 32.8kB 2967MB 2967MB primary boot, hidden
2 2967MB 3077MB 110MB primary fat16
(parted) mkpart primary 3077 7500
(parted) quit
Information: You may need to update /etc/fstab.
确认:
~ $ fdisk -l
...
Disk /dev/sdb: 7.6 GiB, 8097103872 bytes, 15814656 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
Disklabel type: dos
Disk identifier: 0x77e6cfe3
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 64 5794271 5794208 2.8G 17 Hidden HPFS/NTFS
/dev/sdb2 5794272 6009311 215040 105M 1 FAT12
/dev/sdb3 6009312 14648437 8639126 4.1G 83 Linux
答案3
虽然您可能有足够的空间,但应该还有其他单独的分区可能会给您带来问题。刷新 gpart 并检查所有分区是否正常,这不是问题的一部分。