Test: # hdparm -I /dev/sda | grep -i trim * Data Set Management TRIM supported * Deterministic read data after TRIM In /etc/fstab: /dev/sda1 / ext4 errors=remount-ro,discard 0 1 ^^^^^^^ Verwende auch noatime. Test: ~# echo "ABCDEFGHIJKLMNOPQRSTUVWXYZ" > /home/tempdatei2.txt ~# sync ~# hdparm --fibmap /home/tempdatei2.txt /home/tempdatei2.txt: filesystem blocksize 4096, begins at LBA 2048; assuming 512 byte sectors. byte_offset begin_LBA end_LBA sectors 0 17045800 17045807 8 ~# hdparm --read-sector 17045800 /dev/sda /dev/sda: reading sector 17045800: succeeded 4241 4443 4645 4847 4a49 4c4b 4e4d 504f 5251 5453 5655 5857 5a59 000a 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 [...] ~# rm /home/tempdatei2.txt ~# sync ~# hdparm --read-sector 17045800 /dev/sda /dev/sda: reading sector 17045800: succeeded 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 [...] Scheduler prüfen: $ cat /sys/block/sdX/queue/scheduler noop deadline [cfq] kann auch on the fly gesetzt werden. Für SSD verwende noop oder deadline. Sehr clever: In /etc/udev/rules.d/60-schedulers.rules # set deadline scheduler for non-rotating disks ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline" Intel SSD 520 series. Let the madness begin. After installing the SATA3 card and the SSD I had to make shure that the SATA controller of this card is set to AHCI mode. Unfortunately, the drive reports a wrong physical sector size. It should be 4096 bytes. This means that I have to make shure that I align the partitions at 4096 bytes (aligning at 1 MiB is therefore ok.) Also, I have to tell the filesystem I will create that it should use a block size of 4096 bytes. speedy:/home/urs# hdparm -I /dev/sdc /dev/sdc: ATA device, with non-removable media Model Number: INTEL SSDSC2CW120A3 Serial Number: CVCV250604LB120BGN Firmware Revision: 400i Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0 Standards: Used: unknown (minor revision code 0x0110) Supported: 9 8 7 6 5 Likely used: 9 Configuration: Logical max current cylinders 16383 16383 heads 16 16 sectors/track 63 63 -- CHS current addressable sectors: 16514064 LBA user addressable sectors: 234441648 LBA48 user addressable sectors: 234441648 Logical Sector size: 512 bytes Physical Sector size: 512 bytes Logical Sector-0 offset: 0 bytes device size with M = 1024*1024: 114473 MBytes device size with M = 1000*1000: 120034 MBytes (120 GB) cache/buffer size = unknown Nominal Media Rotation Rate: Solid State Device Capabilities: LBA, IORDY(can be disabled) Queue depth: 32 Standby timer values: spec'd by Standard, no device specific minimum R/W multiple sector transfer: Max = 16 Current = 16 Advanced power management level: 254 DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 Cycle time: min=120ns recommended=120ns PIO: pio0 pio1 pio2 pio3 pio4 Cycle time: no flow control=120ns IORDY flow control=120ns Commands/features: Enabled Supported: * SMART feature set Security Mode feature set * Power Management feature set * Write cache Look-ahead * Host Protected Area feature set * WRITE_BUFFER command * READ_BUFFER command * NOP cmd * DOWNLOAD_MICROCODE * Advanced Power Management feature set Power-Up In Standby feature set * SET_FEATURES required to spinup after power up * 48-bit Address feature set * Mandatory FLUSH_CACHE * FLUSH_CACHE_EXT * SMART error logging * SMART self-test * General Purpose Logging feature set * WRITE_{DMA|MULTIPLE}_FUA_EXT * 64-bit World wide name * IDLE_IMMEDIATE with UNLOAD * WRITE_UNCORRECTABLE_EXT command * {READ,WRITE}_DMA_EXT_GPL commands * Segmented DOWNLOAD_MICROCODE * Gen1 signaling speed (1.5Gb/s) * Gen2 signaling speed (3.0Gb/s) * Gen3 signaling speed (6.0Gb/s) * Native Command Queueing (NCQ) * Host-initiated interface power management * Phy event counters * unknown 76[14] * DMA Setup Auto-Activate optimization Device-initiated interface power management * Software settings preservation * SMART Command Transport (SCT) feature set * SCT Data Tables (AC5) * Data Set Management TRIM supported (limit 1 block) * Deterministic read data after TRIM Security: Master password revision code = 65534 supported not enabled not locked frozen not expired: security count supported: enhanced erase 4min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT. Logical Unit WWN Device Identifier: 5001517803d3562d NAA : 5 IEEE OUI : 001517 Unique ID : 803d3562d Checksum: correct Create this partition table with parted: Model: ATA INTEL SSDSC2CW12 (scsi) Disk /dev/sdc: 120GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 525MB 524MB boot 2 525MB 43.5GB 42.9GB debian 3 43.5GB 86.4GB 42.9GB alt1 4 86.4GB 120GB 33.6GB alt2 Now do: root@speedy:~# mkfs.ext4 -b 4096 /dev/sdc1 mke2fs 1.42.5 (29-Jul-2012) Blöcke des Gerätes werden verworfen: erledigt Dateisystem-Label= OS-Typ: Linux Blockgröße=4096 (log=2) Fragmentgröße=4096 (log=2) Stride=0 Blöcke, Stripebreite=0 Blöcke 128000 Inodes, 128000 Blöcke 6400 Blöcke (5.00%) reserviert für den Superuser Erster Datenblock=0 Maximale Dateisystem-Blöcke=134217728 4 Blockgruppen 32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe 32000 Inodes pro Gruppe Superblock-Sicherungskopien gespeichert in den Blöcken: 32768, 98304 Platz für Gruppentabellen wird angefordert: erledigt Inode-Tabellen werden geschrieben: erledigt Erstelle Journal (4096 Blöcke): erledigt Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt root@speedy:~# mkfs.ext4 -b 4096 /dev/sdc2 mke2fs 1.42.5 (29-Jul-2012) Blöcke des Gerätes werden verworfen: erledigt Dateisystem-Label= OS-Typ: Linux Blockgröße=4096 (log=2) Fragmentgröße=4096 (log=2) Stride=0 Blöcke, Stripebreite=0 Blöcke 2621440 Inodes, 10485760 Blöcke 524288 Blöcke (5.00%) reserviert für den Superuser Erster Datenblock=0 Maximale Dateisystem-Blöcke=4294967296 320 Blockgruppen 32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe 8192 Inodes pro Gruppe Superblock-Sicherungskopien gespeichert in den Blöcken: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Platz für Gruppentabellen wird angefordert: erledigt Inode-Tabellen werden geschrieben: erledigt Erstelle Journal (32768 Blöcke): erledigt Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt root@speedy:~# mkfs.ext4 -b 4096 /dev/sdc3 mke2fs 1.42.5 (29-Jul-2012) Blöcke des Gerätes werden verworfen: erledigt Dateisystem-Label= OS-Typ: Linux Blockgröße=4096 (log=2) Fragmentgröße=4096 (log=2) Stride=0 Blöcke, Stripebreite=0 Blöcke 2621440 Inodes, 10485760 Blöcke 524288 Blöcke (5.00%) reserviert für den Superuser Erster Datenblock=0 Maximale Dateisystem-Blöcke=4294967296 320 Blockgruppen 32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe 8192 Inodes pro Gruppe Superblock-Sicherungskopien gespeichert in den Blöcken: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Platz für Gruppentabellen wird angefordert: erledigt Inode-Tabellen werden geschrieben: erledigt Erstelle Journal (32768 Blöcke): erledigt Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt root@speedy:~# mkfs.ext4 -b 4096 /dev/sdc4 mke2fs 1.42.5 (29-Jul-2012) Blöcke des Gerätes werden verworfen: erledigt Dateisystem-Label= OS-Typ: Linux Blockgröße=4096 (log=2) Fragmentgröße=4096 (log=2) Stride=0 Blöcke, Stripebreite=0 Blöcke 2052176 Inodes, 8205312 Blöcke 410265 Blöcke (5.00%) reserviert für den Superuser Erster Datenblock=0 Maximale Dateisystem-Blöcke=4294967296 251 Blockgruppen 32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe 8176 Inodes pro Gruppe Superblock-Sicherungskopien gespeichert in den Blöcken: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Platz für Gruppentabellen wird angefordert: erledigt Inode-Tabellen werden geschrieben: erledigt Erstelle Journal (32768 Blöcke): erledigt Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt Add a line to fstab, but uncomment it for now. We will activate it, once /usr is copied over. Mind discard and noatime. # /etc/fstab: static file system information. # # proc /proc proc defaults 0 0 /dev/sda1 / ext3 errors=remount-ro,noatime 0 1 #/dev/sdc2 /usr ext4 errors=remount-ro,noatime,discard 0 1 /dev/sda2 /disks/smallfiles reiserfs defaults,notail,noatime,nodiratime 0 2 /dev/sda3 none swap sw 0 0 /dev/sda5 /disks/altlinux1 ext3 defaults,noauto 0 0 /dev/sda6 /disks/altlinux2 ext3 defaults,noauto 0 0 /dev/sda7 /disks/bulk ext3 defaults,noauto,user 0 0 /dev/sdb1 /disks/windows ntfs-3g defaults,noauto 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/sdd1 /media/usb0 auto user,noauto 0 0 Let's test it: speedy:/home/urs# mount /dev/sdc2 /mnt -o noatime,discard speedy:/home/urs# cd /mnt speedy:/mnt# echo "ABCDEFGHIJKLMNOPQRSTUVWXYZ" > test.txt speedy:/mnt# sync speedy:/mnt# hdparm --fibmap test.txt test.txt: filesystem blocksize 4096, begins at LBA 1026048; assuming 512 byte sectors. byte_offset begin_LBA end_LBA sectors 0 1296392 1296399 8 speedy:/mnt# hdparm --read-sector 1296392 /dev/sdc /dev/sdc: reading sector 1296392: succeeded 4241 4443 4645 4847 4a49 4c4b 4e4d 504f 5251 5453 5655 5857 5a59 000a 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 speedy:/mnt# rm test.txt speedy:/mnt# sync speedy:/mnt# hdparm --read-sector 1296392 /dev/sdc /dev/sdc: reading sector 1296392: succeeded 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 It works flawlessly. Now for the scheduler: speedy:/etc/udev/rules.d# cat /sys/block/sdc/queue/scheduler noop deadline [cfq] It is, as expected cfq. We should use noop instead. In order to configure that, we use udev such that it automatically sets the scheduler to noop for every SSD device. In /etc/udev/rules.d/60-schedulers.rules write: # set deadline scheduler for non-rotating disks ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop" Let us restart and check whether udev behaves. After restarting (In fact, only /dev/sdc is an SSD): speedy:/home/urs# cat /sys/block/sdc/queue/scheduler [noop] deadline cfq speedy:/home/urs# cat /sys/block/sda/queue/scheduler noop deadline [cfq] speedy:/home/urs# cat /sys/block/sdb/queue/scheduler noop deadline [cfq] Now, it's time to trasnfer the data. Just to be shure, I boot into Knoppix to do the copy. In Knoppix: # mkdir /mnt/from # mkdir /mnt/to # mount /dev/sdc2 /mnt/to # mount /dev/sda1 /mnt/from -o ro # cp -R -a /mnt/from/usr/* /mnt/to The also remove the # in /mnt/from/etc/fstab so the new partition gets mounted as /usr at the next boot. (Remount /dev/sda1, as it is now mounted ro. Also note, that mount /media/sdc2 would mount with nodev, so changes do not get written to disks, therefore we used out own mountpoint.) Let's do some checks just to be shure: speedy:/home/urs# debsums -c /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/lib/lives/plugins/encoders/multi_encoder /usr/bin/lives_theora_encoder /var/lib/xine/xine.desktop I don't care about /var and *_encoder have been changed by myself, but what is going on with debian-archive-removed-keys.gpg? speedy:/home/urs# dpkg-query -S /usr/share/keyrings/debian-archive-removed-keys.gpg debian-archive-keyring: /usr/share/keyrings/debian-archive-removed-keys.gpg speedy:/home/urs# apt-get install --reinstall debian-archive-keyring Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig 0 aktualisiert, 0 neu installiert, 1 erneut installiert, 0 zu entfernen und 260 nicht aktualisiert. Es müssen 30.4 kB an Archiven heruntergeladen werden. Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Holen: 1 ftp://ftp.ch.debian.org/debian/ testing/main debian-archive-keyring all 2012.4 [30.4 kB] Es wurden 30.4 kB in 0 s geholt (62.3 kB/s). (Lese Datenbank ... 494092 Dateien und Verzeichnisse sind derzeit installiert.) Vorbereitung zum Ersetzen von debian-archive-keyring 2012.4 (durch .../debian-archive-keyring_2012.4_all.deb) ... Ersatz für debian-archive-keyring wird entpackt ... debian-archive-keyring (2012.4) wird eingerichtet ... speedy:/home/urs# debsums debian-archive-keyring /usr/share/doc/debian-archive-keyring/README OK /usr/share/doc/debian-archive-keyring/changelog.gz OK /usr/share/doc/debian-archive-keyring/copyright OK /usr/share/keyrings/debian-archive-keyring.gpg OK /usr/share/keyrings/debian-archive-removed-keys.gpg OK I estimate that this difference was there before and that no more problems are ahead. As last thing, after checking that everything really works, everything in /usr can be removed from /dev/sda1 So, we are done now.