cryptsetup:无法擦除设备上的标头

cryptsetup:无法擦除设备上的标头

我正在尝试在 Ubuntu 14.04 上加密外部硬盘本指南。我首先格式化为ext4

$ sudo mkfs.ext4 /dev/sde1
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
9773056 inodes, 39072470 blocks
1953623 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
1193 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done     

然后继续初始化,但它返回此错误:

$ sudo cryptsetup -y -v luksFormat /dev/sde1

WARNING!
========
This will overwrite data on /dev/sde1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
Verify passphrase: 
Cannot wipe header on device /dev/sde1.
Command failed with code 5: Cannot wipe header on device /dev/sde1.

到目前为止,我在网上找不到有关此错误的任何有用信息。您知道可能出了什么问题吗?

更新一:回答Xen2050 提出的问题bablocks格式化之前我以写入模式运行,没有报告任何错误。

我再次尝试加密,更加关注系统消息。这是dmesg连接驱动器后立即的输出:

$ dmesg
[ 3208.032228] usb 2-1.4: new high-speed USB device number 7 using ehci-pci
[ 3208.140990] usb 2-1.4: New USB device found, idVendor=059f, idProduct=0651
[ 3208.141001] usb 2-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3208.141024] usb 2-1.4: Product: LaCie Hard Drive USB
[ 3208.141031] usb 2-1.4: Manufacturer: LaCie
[ 3208.141037] usb 2-1.4: SerialNumber: 10000E000BD8A671
[ 3208.177576] usb-storage 2-1.4:1.0: USB Mass Storage device detected
[ 3208.178112] scsi4 : usb-storage 2-1.4:1.0
[ 3208.178183] usbcore: registered new interface driver usb-storage
[ 3209.176917] scsi 4:0:0:0: Direct-Access     SEAGATE  ST3160812A       3.AA PQ: 0 ANSI: 2
[ 3209.177561] sd 4:0:0:0: Attached scsi generic sg2 type 0
[ 3209.181342] sd 4:0:0:0: [sdb] 312581808 512-byte logical blocks: (160 GB/149 GiB)
[ 3209.182337] sd 4:0:0:0: [sdb] Write Protect is off
[ 3209.182348] sd 4:0:0:0: [sdb] Mode Sense: 53 00 00 08
[ 3209.183339] sd 4:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 3209.201618]  sdb: sdb1
[ 3209.229465] sd 4:0:0:0: [sdb] Attached SCSI disk

然后验证它没有被安装:

$ findmnt /dev/sdb
$ findmnt /dev/sdb1
$

再次尝试初始化:

$ sudo cryptsetup -y -v luksFormat /dev/sdb1

WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
Verify passphrase: 
Cannot wipe header on device /dev/sdb1.
Command failed with code 5: Cannot wipe header on device /dev/sdb1.

日志中出现两条新行:

$ tail /var/log/syslog
Dec  8 09:18:20 MekanikDestruktiwKommandoh kernel: [ 3698.016311] end_request: critical target error, dev sdb, sector 0
Dec  8 09:18:28 MekanikDestruktiwKommandoh wpa_supplicant[1188]: wlan0: CTRL-EVENT-SCAN-STARTED 

扇区 0 似乎出了问题,但完全不清楚是什么问题。

更新二:尝试Xen2050 的新建议. 首先向 0 扇区写入零:

$ sudo dd if=/dev/zero of=/dev/sdb1 bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.564427 s, 18.6 MB/s

此后cryptsetup初始化仍然失败。wipefs返回一个奇怪的警告:

$ sudo wipefs -a /dev/sdb
wipefs: WARNING: /dev/sdb: appears to contain 'dos' partition table

并且显然什么也没做。然后cryptsetup带着debug标志运行;它打印出一堆新的东西,但没有提供有关错误的更多信息:

$ sudo cryptsetup --debug -y -v luksFormat /dev/sdb
# cryptsetup 1.6.1 processing "cryptsetup --debug -y -v luksFormat /dev/sdb"
# Running command luksFormat.
# Locking memory.
# Installing SIGINT/SIGTERM handler.
# Unblocking interruption on signal.

WARNING!
========
This will overwrite data on /dev/sdb irrevocably.

Are you sure? (Type uppercase yes): YES
# Allocating crypt device /dev/sdb context.
# Trying to open and read device /dev/sdb.
# Initialising device-mapper backend library.
# Timeout set to 0 miliseconds.
# Iteration time set to 1000 miliseconds.
# Interactive passphrase entry requested.
Enter passphrase: 
Verify passphrase: 
# Formatting device /dev/sdb as type LUKS1.
# Crypto backend (gcrypt 1.5.3) initialized.
# Topology: IO (512/0), offset = 0; Required alignment is 1048576 bytes.
# Generating LUKS header version 1 using hash sha1, aes, xts-plain64, MK 32 bytes
# Crypto backend (gcrypt 1.5.3) initialized.
# KDF pbkdf2, hash sha1: 356173 iterations per second.
# Data offset 4096, UUID 5fa9c58f-b047-4c9e-a6e8-26a9a433a438, digest iterations 43375
Cannot wipe header on device /dev/sdb.
# Releasing crypt device /dev/sdb context.
# Releasing device-mapper backend.
# Unlocking memory.
Command failed with code 5: Cannot wipe header on device /dev/sdb.

答案1

我知道这个问题很老了,但是我正在寻找相同错误消息“无法擦除设备上的标题”的解决方案,并找到了这里未列出的解决方案:如果输出cryptsetup luksFormat还包括以下内容:

警告:数据偏移超出了当前可用的数据设备。

然后分区太小。

如果您正在创建一个仅包含用于加密其他分区的密钥文件的分区,则最有可能遇到这种情况。

看来,在cryptsetup2.1.0 中,LUKS 标头占用了不到 16MiB(详情见下文),因此分区大小必须16MiB + 密钥的大小您想要在其中存储(比如说 3MiB)。

为了说明起见,对于 8MiB 分区,我看到了以下错误:

$ sudo cryptsetup luksFormat ${/dev/keypartition} --debug
[...]
# Formatting LUKS2 with JSON metadata area 12288 bytes and keyslots area 16744448 bytes.
[...]
WARNING: Data offset is outside of currently available data device.
Device wipe error, offset 8388608.
Cannot wipe header on device /dev/sda2.

请注意,12288 字节 + 16744448 字节 = 15.98 MiB。

随着大小/dev/sda2增加到 19MiB,我成功将其设置为 LUKS 分区。

笔记: cryptsetup luksFormat也可以在 16MiB 下使用dev/sda2,但随后cryptsetup luksOpen失败了

请求的偏移量超出了设备 /dev/sda2 的实际大小。

进一步增加到/dev/sda232MiB 解决了这个问题,但当我尝试使用该分区作为密钥文件时,cryptsetup luksFormat --key-file=/dev/mapper/<mountpoint of /dev/sda2> <device to encrypt>失败了

超出最大密钥文件大小。

对此有两个解决方案:(1)将包含密钥的分区的大小设置为 16MiB + 密钥文件大小,确保密钥文件大小小于最大值;(2)使用该--keyfile-size选项cryptsetup luksFormat仅使用密钥文件的某些部分。

答案2

一位朋友通过类似这样的方式手动将零写入目标分区的前几兆来解决了这个(或非常相似的)错误:

 dd if=/dev/zero of=[target] bs=1M count=2

或者,如果它只是一个覆盖 FS 问题,那么wipefs可能会用上面的方法代替/来工作。

另外,另一个使用带有 p 的“--debug”选项cryptsetu来获取更多信息,值得先尝试一下。


“更新 II”信息测试使用 /dev/sdb1 然后是 /dev/sdb,但不确定是否会有所不同。

这里还有另一个人“我的软盘、拇指驱动器和硬盘驱动器都存在‘0 扇区’问题,这些问题都可以通过进入 Linux Live CD 并擦除前 100 个扇区左右来解决 dd if=/dev/zero of=/dev/hdN bs=1024 count=1024

此错误报告评论关于另一个外部 USB 硬盘和“end_request:严重目标错误,dev sdb,扇区 0“似乎说 Ubuntu 12.04 可以运行而 14.04 却不行。其他人说可能是 USB 电源损坏或不足,或者硬件出现故障(外壳、电线、硬盘)

结果和建议都不太一样。我使用 USB 外壳的运气也不是很好,我倾向于尝试不同的外壳或直接连接到桌面/esata 电缆。

答案3

cryptsetup当我尝试在 ~1TB 的外部 SSD 上进行分区时,我在 2022 年使用 20.04.4 LTS 时收到了非常相似的错误消息:

Device wipe error, offset 0.
Cannot wipe header on device /dev/sda2.

奇怪的是,只需拔掉一堆 USB 设备(除键盘/鼠标/外部 SSD 之外的所有设备)就可以让错误消失。

相关内容