【发布时间】:2011-07-08 22:34:57
【问题描述】:
我正在编写一个脚本来更改 NTFS 分区的 UUID(AFAIK,没有)。这意味着将 8 个字节从 0x48 写入 /dev/sdaX 的 0x4F(十进制 72-79)(X 是我的分区的 #)。
如果我想将其更改为随机 UUID,我可以使用这个:
dd if=/dev/urandom of=/dev/sdaX bs=8 count=1 seek=9 conv=notrunc
或者我可以将 /dev/urandom 更改为 /dev/sdaY 以从另一个分区克隆 UUID。
但是...如果我想制作个性化的 UUID 怎么办?我已经以十六进制字符串格式(16 个字符)将它存储(并经过正则表达式检查)在 $UUID 变量中,如下所示:
UUID="2AE2C85D31835048"
我正在考虑这种方法:
echo "$UUID" | xxd -r -p | dd of=/dev/sdaX ...
这只是一个划痕......我不确定使它工作的确切选项。我的问题是:
-
echo $var | xxd -r | dd真的是最好的方法吗? - 使它工作的确切命令和选项是什么?
至于答案,我也在找:
- 对所使用的所有选项及其作用的说明。
- 如果可能,在更改分区之前在文件和/或屏幕中测试它的替代命令。
我已经有一个名为 ntfs.bin 的 100 字节转储文件,可用于测试和检查结果
xxd ntfs.bin
因此,任何为我提供在屏幕上使用xxd 检查结果的方法以便我可以与原始 ntfs.bin 文件进行比较的解决方案将不胜感激。
谢谢!
【问题讨论】:
-
这里只是一个简短的问题,您已经成功地在您的设备上测试了这个
dd吗?您的echo ... dd管道应该可以工作,因为如果if=未命名,它将读取标准输入。 -
好吧,我已经针对我的 ntfs.bin 文件测试了 dd if=/dev/urandom。它工作得很好(我编辑了我的帖子以添加 conv=notrunc 选项)。但我担心的是:/dev/urandom 有无限字节,而我的 echo 只有 16 个。使用 seek 时,它是否同时搜索输出和输入?如何指定“读取整个输入,但只寻找输出”?我应该使用“寻找”还是“跳过”?为什么?