非常慢的复制Ubuntu 12.10,AHCI。

我有两个硬盘,一个是SSD(三星830 128GB),另一个是普通的HDD(西部数据1TB),并且安装了Ubuntu 12.10。BIOS中启用了AHCI。我在所有方向上都遇到了极慢的复制问题(三星->三星,西部数据->西部数据,西部数据->三星和三星->西部数据)。
让我描述一下我做了什么:
sudo hdparm -Tt /dev/sda

结果还算可以。
Timing cached reads:   16678 MB in  2.00 seconds = 8358.48 MB/sec
Timing buffered disk reads: 1362 MB in  3.00 seconds = 453.96 MB/sec

当使用cp命令或在午夜指挥官中复制时,我只能得到大约1MB/s的传输速度!开始阅读一些资料后,禁用写入缓存。
hdparm -W 0 /dev/sda

速度达到了每秒60MB的疯狂速度,对于SSD驱动器内部的操作来说,这仍然算不上什么。
两个驱动器都连接到主板上的SATA 3插槽。顺便说一下:从USB闪存盘复制的速度要快得多,所以看起来是读取速度的问题。 这个问题在Windows系统中并不存在。我在下面粘贴了dmesg的内容:
[ 4898.720381] ata1.00: configured for UDMA/133 [ 4898.720387] ata1: EH complete 
[ 4898.720509] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA 
[ 4983.122199] ata2.00: configured for UDMA/133 
[ 4983.122205] ata2: EH complete 
[4983.122315] sd 1:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA

你有什么想法可能出了什么问题吗?

我遇到了类似的问题。本以为通过使用16GB而不是24GB的内存条(2根而不是3根)来解决它,但似乎问题又出现了...你的内存配置是怎样的? - kamziro
1个回答

看起来你的分区在SSD的情况下没有对齐到擦除块边界,而在HDD的情况下没有对齐到扇区边界。这就是为什么在复制时会出现问题,因为复制涉及到对其中一个驱动器进行写入,但仅仅从驱动器中读取时不会出现问题。
WD Caviar硬盘的扇区大小为4096字节,但为了增加“兼容性”,向BIOS公开的扇区大小为512字节。Ubuntu的默认分区设置不会将分区对齐到8个扇区,这将导致每次写入都被驱动器的512字节扇区仿真转换为读取和重写操作。这将完全降低性能。
SSD通常具有128KB到1024KB之间的擦除页大小。最好将分区对齐到1024KB的倍数。
通常,fdisk使用512字节的扇区大小。这意味着你的HDD分区应该从8的倍数扇区开始,而SSD分区应该从2048的倍数扇区开始。请注意,在启动驱动器上,第一个分区应该距离驱动器起始位置至少64KB,以便GRUB引导映像可以适应MBR和第一个分区之间的空间。
总结一下,你需要重新分区和格式化你的驱动器。使用LiveCD中的fdisk -u /dev/sda命令来设置从2048个扇区的倍数开始的分区。在设置完分区后,你可以使用Ubuntu的安装程序来格式化它们。

非常感谢大家的热烈回应。事实上,我现在无法重新格式化驱动器,因为我每天都在上面工作,而且需要花费很多时间。但是一旦我能够做到,我会写信告诉大家是否成功! - Mat
真的吗?看起来分区界面的默认行为是将分区对齐到1MB的边界。它只是将大小"对齐"(四舍五入)到1MB的增量吗?还是我完全错了? - doug65536