Такім чынам, Дамы і Госпада - нарэшце-то я паставіў у свой маленькі eee pc SSD дыск 🙂 Перш чым даведацца, як яго максімальна аптымізаваць у асяроддзі Linux, прыйшлося ладна Помучаться.
Такім чынам, SSD-носьбіт добры ўсім: хуткасць чытання / запісы дадзеных, час доступу, адсутнасць фрагментацыі, спажываная магутнасць (што вельмі важна для небуков і наўтбукаў). Апошняе пакаленне гэтых дыскаў гарантуюць адпрацоўку, параўнальную з звычайнымі HDD, (а пры правільным звароце нават у некалькі разоў вышэй) таму зараз ужо можна абзавесціся такім цвёрдацельным девайсом.
Галоўны мінус гэтых носьбітаў, і, на жаль, мінус пакуль вялікі - неабходна пазбягаць вельмі частага звароту да дыска з частай запісам дробных файлаў. У параўнанні з HDD, у SSD памеры кластараў нашмат больш, адпаведна, запіс невялікага лога патрывожыць цэлы кластар. Заўзяты прыклад - запіс логаў у Linux, журналяванне файлавай сістэмы і астатнія падобныя рэчы. Адпаведна, наша з Вамі задача скараціць колькасць зваротаў да дыска. Такім чынам, паехалі:
1) Самае галоўнае, ад чаго трэба адштурхоўвацца - гэта каманда TRIM. Для яе падтрымкі неабходна ядро, не старэйшыя за чым 2.6.3.3. Калі ядро больш старое - то прыйдзецца ставіць ядро навейшы. Як гэта зрабіць у Debian Squeeze - можна прачытаць тут . Калі ўсе ўмовы выкананыя - неабходна адрэдагаваць файл / etc / fstab:
# <File system> <mount point> <type> <options> <dump> <pass> proc / proc proc defaults 0 0 # / was on / dev / sda1 during installation UUID = eb07b6cb-e4ed-47a7-9518-19272a91a01a / ext4 noatime, nodiratime, discard, errors = remount-ro 0 1 # SWAP-частка на флешке UUID = 93c7ee68-a625-44d6-b1ec-5fc1c55e1e57 swap swap defaults 0 0 / dev / scd0 / media / cdrom0 udf, iso9660 user, noauto 0 0 # Кэш браўзэра google-chrome на tmpfs tmpfs /home/erdees/.cache/google-chrome tmpfs size = 1000M, mode = 0777 0 0 # Астатнія раздзелы і дырэкторыі, перанесеныя ў tmpfs tmpfs / tmp tmpfs defaults 0 0 tmpfs / var / tmp tmpfs defaults 0 0 tmpfs / var / lock tmpfs defaults 0 0 #tmpfs / var / log tmpfs defaults 0 0 erdees @ erdees-netbook: ~ $
Самае галоўнае ў гэтым конфіге - гэта ўключэнне TRIM. За яго ўключэнне адказвае параметр discard. Калі прыгледзецца, то там жа побач можна знайсці параметры noatime і nodiratime - першы адключае абнаўленне час доступу да файлаў, другі - адключае запіс час доступу да каталогаў. Такім чынам, мы ўключылі TRIM і крыху знізілі колькасць запісу на SSD.
Як бачна, усе дырэкторыі, у якіх адбываюцца частыя цыклы чытання / запісы знаходзяцца ў tmpfs (tmpfs - гэта віртуальная файлавая сістэма, якая знаходзіцца ў аператыўнай памяці), куды акрамя tmp, var і іншага перанесены кэш браўзэра google-chrome. Для іншых браўзэраў радок у fstab отличасться практычна не будзе - галоўнае, гэта перанесці тэчку з кэшам у tmpfs. Што тычыцца радкі са SWAP-падзелам на флешке - то мы пакуль яго не чапаем.
2) Момант другі - файлавая сістэма павінна быць альбо ext4, альбо btrfs. Іншыя не падтрымліваюцца. SWAP-частка рэкамендавана адключыць, альбо выкарыстоўваць на іншым дыску / носьбіце. Як правіла, на сучасных наўтбуках і нетбуках аператыўнай памяці заўсёды хапае і своп не задзейнічаны, але часам туды можа сыпацца куча дробязі. Напрыклад, у мяне SWAP вісіць на SD-флешке, убачыць гэта можна ў прыведзеным вышэй fstab. Але пра гэта пазней. Калі Вы ставілі сістэму са своп, то пакуль проста закомментируйте радок.
3) Неабходна пераканацца, ці працуе TRIM. Ёсць два спосабу зрабіць гэта. Аднак першы не 100% дакладны і ў мяне не пракаціў.
Спосаб першы:
Ствараем пры дапамозе ўтыліты dd файл:
dd if = / dev / urandom of = tempfile count = 10 bs = 512k oflag = direct
Пры поспеху ўбачым выснову:
10 + 0 запісаў лічыцца 10 + 0 запісаў напісана скапіявана 5242880 байт (5,2 MB), 2,17641 c, 2,4 MB / c
Далей шукаем стартавы LBA створанага намі файла:
root @ erdees-netbook: / home / erdees / new # hdparm --fibmap tempfile tempfile: filesystem blocksize 4096, begins at LBA 2048; assuming 512 byte sectors. byte_offset begin_LBA end_LBA sectors 0 2886656 2888703 2048 1048576 2983936 2985983 2048 2097152 2979840 2983935 4096 4194304 2992128 2994175 2048
Пасля робім пошук па begin_LBA:
hdparm --read-sector [нумар сектара] / dev / sda
Ўбачым прыкладна такая выснова:
fd51 270e 3ea6 6a69 694e 48cf ed26 fa8f c124 ffc6 5a04 7d60 cbc2 0954 d2ca eff4 d645 8e75 c58b 3b94 adfd 2221 dfd0 20d8 e433 1e3c fcff f265 e899 4694 c4b3 6d0b 6016 be75 b076 23a2 01dc c7dd 6340 2991 06fe 4494 1a7e e2ae 4048 8c9b e3ec 9edf 0e0d 5726 3942 a154 1919 52ec b58e 410a ba61 f8bb 4811 54fc 95c5 5096 aae7 1670 423c 2aa4 0a48 6e1f de3d 6661 3f6d 2a3a e9e6 a082 b72a 87c9 2fa1 7a8b 9b97 1db6
Цяпер выдалім файл:
rm tempfile
Выконваем сінхранізацыю:
sync
Цяпер выканаў каманду hdparm -read-sector [нумар сектара] / dev / sda зноў, пасля чаго замест папярэдняга вываду сектараў, у Вас павінны з'явіцца толькі нулі. Аднак у мяне гэта не проканало, на жаль. Спосаб праверкі вельмі наглядны, аднак sync не гарантуе сінхранізацыю ФС.
Спосаб другі - гэта ўсяго толькі адна каманда:
root @ erdees-netbook: / home / erdees / new # hdparm -I / dev / sda | grep TRIM * Data Set Management TRIM supported (limit unknown)
Адпаведна, наяўнасць надпісы supported азначае, што TRIM падтрымліваецца, а зорачка злева - то што ён у дадзены момант актываваны. Вось яно як.
4) Яшчэ парачка конфігаў і рэкамендацый. Я наладзіў адкладзеную запіс. То бок, усе працэсы ў сістэме пішуцца ў tmpfs, а калі прыйдзе зададзены час - то звяртаюцца ўжо да дыска. Дадаем радкі ў /etc/sysctl.conf
vm.laptop_mode = 5 vm.dirty_writeback_centisecs = 15000
На гэтым з sysctl ўсё. Яшчэ я б параіў выключыць планавальнік ўводу-вываду, так як ён не здольны працаваць з SSD. Заходзім у конфіг GRUB, / etc / default / grub, і заменны радок
GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash"
на
GRUB_CMDLINE_LINUX_DEFAULT = "elevator = noop"
І яшчэ адзін выкрутасаў з GRUB: я адключыў затрымку пры выбары ядра пры ўключэнні сістэмы, каб скараціць час уключэння нетбука. Рэдагуемы файл /boot/grub/grub.cfg і параметр
set timeout = 5
Робім роўным "0". Гэтак жа я ўключыў аўтаматычны ўваход у сістэму. Адным словам, сістэма з моманту праходу POST, грузіцца 5-7 секунд, выключаецца усяго за 4 секунды.
5) Сочым за інтэнсіўнасцю чытання / запісы з дыска. У гэтым мне дапамагла выдатная ўтыліта - iotop. Усталёўваем яе:
aptitude install iotop
І запускаем камандай iotop ад root. Ўтыліта выглядае сапраўды гэтак жа, як і звычайны top, аднак, выводзіць інфармацыю аб працэсах запісу / чытання з дыска.
Вось у прынцыпе і ўсё, што я пакуль накапаў пра SSD-дыскі пад Linux. Гэтак жа ў сетцы хадзіла шмат інфармацыі пра адключэнне журналяванне файлавай сістэмы. Калі гэта зрабіць, то можна добра скараціць колькасць цыклаў запісу на дыск. Аднак, я лічу, што гэта крыху рызыкоўна: па-першае, пры няправільным адключэнні журналявання можна страціць TRIM, па-другое - пры адключэнні харчавання, можна страціць важныя дадзеныя.