我正在使用以下命令复制 CDROM 映像:
# dd if=/dev/sr0 of=./maverick.iso
但是速度很慢,大约 350k 字节/秒。我搜索了谷歌,并尝试了命令
# hdparm -vi /dev/sr0
/dev/sr0:
HDIO_DRIVE_CMD(identify) failed: Bad address
IO_support = 1 (32-bit)
readonly = 0 (off)
readahead = 256 (on)
HDIO_GETGEO failed: Inappropriate ioctl for device
Model=DVD-ROM UJDA775, FwRev=DA03, SerialNo=
Config={ Fixed Removeable DTR<=5Mbs DTR>10Mbs nonMagnetic }
RawCHS=0/0/0, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=unknown, MaxMultSect=0
(maybe): CurCHS=0/0/0, CurSects=0, LBA=yes, LBAsects=0
IORDY=yes, tPIO={min:180,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: sdma0 sdma1 sdma2 mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 *udma2
AdvancedPM=no
Drive conforms to: ATA/ATAPI-5 T13 1321D revision 3: ATA/ATAPI-1,2,3,4,5
* signifies the current active mode
看来 DMA 已经开启了。
设备测试结果显示:
# hdparm -t /dev/sr0
/dev/sr0:
Timing buffered disk reads: 2 MB in 6.58 seconds = 311.10 kB/sec
# sudo hdparm -tT /dev/sr0
/dev/sr0:
Timing cached reads: 2 MB in 2.69 seconds = 760.96 kB/sec
Timing buffered disk reads: m 4 MB in 5.19 seconds = 789.09 kB/sec
CD-ROM 设备和光盘应该没问题,因为我可以使用UltraISO
实用程序在 Windows 中非常快速地复制它。
所以我猜 Ubuntu 中有些东西配置不正确,是吗?
答案1
您错误地使用 dd 。
dd 的块大小默认为 512 字节,对于硬盘来说,这是可以接受的(但不是很好,稍后会详细介绍),因为硬盘扇区大小为 512 字节。然而,CD-ROM 的扇区大小在 2048 到 2352 字节之间。默认块大小会导致驱动器对每个扇区进行四到五次部分读取,从而大大降低其速度。
需要考虑的其他因素是访问时间和驱动器缓冲区。长话短说,您不应该逐个扇区地读取数据,而应该读取大块数据。我不知道驱动器的缓冲区大小是多少,但 32 兆字节通常是一个合适的块大小。
# dd if=/dev/sr0 of=./maverick.iso bs=32M
答案2
它使用 UDMA2,因此应该无需配置。它可能比这更简单:您是否尝试过在 dd 命令上使用 bs=2M?(您可能需要尝试几次才能找到 CD-ROM 的最佳大小,如果 CD 太大,CD 会旋转。dd 不使用重叠 i/o。)较长的读取应该会变得更快。