Answers:
在Linux上获取磁盘大小的最简单方法是blockdev --getsz
:
sudo -s
dd bs=512 if=/dev/zero of=/dev/sdx count=2048 seek=$((`blockdev --getsz /dev/sdx` - 2048))
sda
如果您复制并粘贴并设法复制回车符,那么以身作则非常危险。sdx
会更适合。我采取了预防措施,但是仅由于这些预防措施,我现在才没有销毁磁盘。
每个分区的大小在中可用/proc/partitions
。以下命令显示的大小sdx
(以kB为单位):
awk '$4 == "sdx" {print $3}' </proc/partitions
从而:
dd if=/dev/zero of=/dev/sdx bs=1k count=1024 \
seek=$(($(awk '$4 == "sdx" {print $3}' </proc/partitions) - 1024))
使用搜索到达驱动器的末尾效果很好,即:
seek = $((
blockdev --getsz /dev/sda
-2048))
但是,使用此方法时,建议您要么知道计数值正确,要么根本不使用它。我之所以这样说,是因为驱动器可以具有512字节扇区或4k扇区,如果将此解决方案与具有4k扇区的驱动器一起使用,则不会使用该计数值到驱动器的末尾,并可能会错过最后的RAID信息(我已经遇到了)。
dd
在使用bs
比设备固件或linux内核报告的实际块大小小/大的自定义值时如何处理扇区。
您可以使用来获取磁盘上的扇区数hdparm -v /dev/sdx
。尝试寻找number_of_sectors-2048(假设512字节扇区)。
/sys/block/sdx/queue/physical_block_size
可能会为您提供信息,但是某些较新的磁盘将根据它们报告的扇区大小快速而松散地播放。最好阅读磁盘上的标签或在制造商的数据表中查找它。
hdparm -I /dev/sda
列出了扇区大小的2个“版本”:Logical
和Physical
。这是您所说的“快而松”的意思吗?....我仅仅指刚拿到“感觉”如果有什么打算以这样的方式来表现它很可能是一个RAID系统..
您可以dd
通过fdisk
以下方式使用并获取设备尺寸:
dd if=/dev/zero of=/dev/sda bs=1k \
seek=$(( (`fdisk -l /dev/sda | grep 'Disk /' | cut -d' ' -f 5` -1024*1024)/1024 )) count=1024
我没有使用1m的块大小来避免舍入错误。
或者,您可以编写一个小的C程序(或脚本),该程序lseek
使用SEEK_END
且具有1mb的负偏移量来调用该函数,然后调用write
。