{"id":1600,"date":"2015-03-12T01:19:25","date_gmt":"2015-03-12T00:19:25","guid":{"rendered":"http:\/\/majek.mamy.to\/?p=1600"},"modified":"2015-04-07T01:03:25","modified_gmt":"2015-04-06T23:03:25","slug":"dm-cache-in-slackware","status":"publish","type":"post","link":"https:\/\/majek.sh\/pl\/dm-cache-in-slackware\/","title":{"rendered":"dm-cache w Slackware"},"content":{"rendered":"<p><\/p>\n<h1>bcache vs. dm-cache<\/h1>\n<p>Testowa\u0142em <strong>bcache<\/strong> oko\u0142o roku temu na moim zapasowym serwerze i dzia\u0142a\u0142o to ca\u0142kiem nie\u017ale. Ale od tego czasu, z ka\u017cdym nowym kernelem pojawia\u0142y si\u0119 nowe, cz\u0119sto krytyczne  problemy. Na li\u015bcie malingowej nawet sugerowano, \u017ceby <strong>bcache<\/strong> oznaczy\u0107 z powrotem jako <em>&#8217;experimental&#8217;<\/em>. Po jakim\u015b czasie da\u0142em sobie spok\u00f3j z tym i zacz\u0105\u0142em czeka\u0107 na co\u015b bardziej stabilnego i prostego do konfiguracji. W tym czasie w kernelu by\u0142o ju\u017c <strong>dm-cache<\/strong>, ale wymaga\u0142o dosy\u0107 karko\u0142omnych wywo\u0142a\u0144 <strong>dmsetup<\/strong> z r\u00f3\u017cnymi r\u0119cznie obliczonymi numerkami &#8211; idealny spos\u00f3b na utrat\u0119 danych \ud83d\ude42 Bardziej przyjazny interfejs do zarz\u0105dzania by\u0142 dopiero w planach jako cz\u0119\u015b\u0107 <strong>LVM2<\/strong>.<\/p>\n<p>Na dzie\u0144 dzisiejszy, <strong>LVM2<\/strong> ma ju\u017c wszystkie funkcje potrzebne do zarz\u0105dzania dm-cache, wi\u0119c nadszed\u0142 czas da\u0107 mu szans\u0119 \ud83d\ude42<\/p>\n<p>Podsumowuj\u0105c moje dotychczasowe do\u015bwiadczenie o oboma rowi\u0105zaniami:<\/p>\n<ul>\n<li><strong>bcache<\/strong>\n<ul>\n<li>+ ca\u0142kiem dobra dokumentacja jak dzia\u0142a cache, opis interfejsu do monitorowania, formatu na dysku i co zrobi\u0107 w wypadku problem\u00f3w<\/li>\n<li>+ cache dzia\u0142a bezpo\u015brednio na poziomie urz\u0105dzenia blokowego, wi\u0119c mo\u017cna tak przyspieszy\u0107 ca\u0142y fizyczny dysk bez udzia\u0142u lvm-a, r\u00f3wnie\u017c w ten spos\u00f3b mo\u017cna keszowa\u0107 wszystkie logiczne wolumeny je\u017celi dysk z bcache potraktujemy jako fizyczny wolumen dla lvm-a<\/li>\n<li>+ nie ma problem\u00f3w ze zmian\u0105 rozmiar\u00f3w wolumen\u00f3w na lvm-ie, bo bcache jest pod spodem<\/li>\n<li>+ mo\u017cna zmienia\u0107 wiele parametr\u00f3w cache 'w locie&#8217; w\u0142\u0105cznie z polityk\u0105 writethrough\/writeback<\/li>\n<li>&#8211; nie mo\u017cna zmieni\u0107 w locie urz\u0105dzenia z keszowanego na niekeszowany (i odwrotnie)<\/li>\n<li>&#8211; niestabilny<\/li>\n<li>~ nie wymaga lvm-a do dzia\u0142ania<\/li>\n<\/ul>\n<\/li>\n<li><strong>dm-cache<\/strong>\n<ul>\n<li>+ stabilny<\/li>\n<li>+ \u0142atwy do konfiguracji<\/li>\n<li>+ mo\u017cna bez problemu  przekonwertowa\u0107 dowolny wolumen lvm-a na wspierany przez cache i odwrotnie<\/li>\n<li>&#8211; jeden wolumen z cache dla jednego logicznego wolumenu jaki chcemy przy\u015bpieszy\u0107, wi\u0119c jak mamy wi\u0119cej wolumen\u00f3w, to te\u017c potrzeba wi\u0119ce kawa\u0142k\u00f3w cache &#8211; w por\u00f3wnaniu do wsp\u00f3\u0142dzielonego cache tracimy miejsce<\/li>\n<li>&#8211; bardzo pobie\u017cna dokumentacja &#8211; wystarczaj\u0105ca do konfiguracji, ale praktycznie bez \u017cadnych informacji jak i czy mo\u017cna zmienia\u0107 jakie\u015b parametry dla cache, lub jak to monitorowa\u0107<\/li>\n<li>&#8211; zmiana wielko\u015bci logicznego wolumenu musi odby\u0107 si\u0119 przez pozbawienie go cache, zmian\u0119 i za\u0142o\u017cenie cache od nowa &#8211; tracimy wtedy ca\u0142\u0105 zawarto\u015b\u0107 cache<\/li>\n<li>~ jest cz\u0119\u015bci\u0105 lvm-a<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h1>Wymagania<\/h1>\n<p>Czas wr\u00f3ci\u0107 do <strong>Slackware<\/strong>. Obecnie najnowsz\u0105 stabiln\u0105 wersj\u0105 jest 14.1, wi\u0119c wszystko co dalej opisz\u0119 b\u0119dzie bazowa\u0107 na niej.<\/p>\n<h2>\u015awie\u017cy kernel<\/h2>\n<p>Dystrybucyjny kernel (3.10.17) jest troch\u0119 za stary dla dobrej pracy cache, wi\u0119c lepiej wzi\u0105\u0107 co\u015b z serii co najmniej 3.14. Mo\u017cna skompilowa\u0107 sobie samemu lub pobra\u0107 \u015bwie\u017cszy z <a href=\"ftp:\/\/ftp.osuosl.org\/pub\/slackware\/slackware64-current\/slackware64\/a\/\" target=\"_blank\">drzewa slackware-current<\/a> w kt\u00f3rym obecnie jest 3.14.33.<\/p>\n<h2>\u015awie\u017cy LVM2<\/h2>\n<p>Wersja <strong>LVM2<\/strong> w Slackware 14.1 jest prawie ostatni\u0105 wersj\u0105 BEZ wparcia dla <strong>dm-cache<\/strong>, wi\u0119c tu obowi\u0105zkowo trzeba \u015bci\u0105gn\u0105\u0107 i skompilowa\u0107 \u015bwie\u017c\u0105. Dla pe\u0142nego wsparcia potrzeba jeszcze  <strong>thin-provisioning-tools<\/strong> z narz\u0119dziami typu fsck dla <strong>dm-cache<\/strong>.<\/p>\n<h3>Spos\u00f3b trudny (kompilacja wszystkiego samemu)<\/h3>\n<ol>\n<li>\u015aci\u0105gn\u0105\u0107 \u017ar\u00f3d\u0142a pakietu LVM2 z <a href=\"ftp:\/\/ftp.osuosl.org\/pub\/slackware\/slackware64-14.1\/source\/a\/lvm2\/\" target=\"_blank\">ftp:\/\/ftp.osuosl.org\/pub\/slackware\/slackware64-14.1\/source\/a\/lvm2\/<\/a><\/li>\n<li>\u015aci\u0105gn\u0105\u0107 \u015bwie\u017csz\u0105 wersj\u0119 \u017cr\u00f3de\u0142 LVM2 z <a href=\"ftp:\/\/sources.redhat.com\/pub\/lvm2\/releases\/LVM2.2.02.116.tgz\" target=\"_blank\">ftp:\/\/sources.redhat.com\/pub\/lvm2\/releases\/LVM2.2.02.116.tgz<\/a><\/li>\n<li>\u015aci\u0105gn\u0105\u0107 thin-provisioning-tools z <a href=\"https:\/\/github.com\/jthornber\/thin-provisioning-tools\/archive\/v0.4.1.tar.gz\" target=\"_blank\">https:\/\/github.com\/jthornber\/thin-provisioning-tools\/archive\/v0.4.1.tar.gz<\/a> i zapisa\u0107 je jako <strong>thin-provisioning-tools-0.4.1.tar.gz<\/strong><\/li>\n<li>\u015aci\u0105gn\u0105\u0107 m\u00f3j patch na <em>SlackBuild<\/em> z <a href=\"https:\/\/majek.sh\/dm-cache\/slackware-lvm2-dm-cache.patch\" target=\"_blank\">https:\/\/majek.sh\/dm-cache\/slackware-lvm2-dm-cache.patch<\/a> i zaaplikowa\u0107 do w latalogu lvm2:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">patch -p0 &lt; slackware-lvm2-dm-cache.patch<\/div><\/div>\n<\/li>\n<li>Zbudowa\u0107 nowy pakiet z lvm2:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">sh lvm2.SlackBuild<\/div><\/div>\n<\/li>\n<li>Zaktualizowa\u0107 pakiet lvm2 nowym, kt\u00f3ry powinien by\u0107 w katalogu <em>\/tmp<\/em><\/li>\n<li>Je\u017celi chcemy u\u017cy\u0107 cache na partycji z systemem (i u\u017cywamy lvm-a oraz initrd), to najlepiej zaaplikowa\u0107 m\u00f3j kolejny patch na <strong>mkinitrd<\/strong> i przebudowa\u0107 <em>initrd<\/em>.<br \/>\n\u0141atka: <a href=\"https:\/\/majek.sh\/dm-cache\/slackware-mkinitrd-dm-cache.patch\" target=\"_blank\">slackware-mkinitrd-dm-cache.patch<\/a>.<br \/>\nZastosowanie \u0142atki:<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">cd \/sbin<br \/>\npatch -p0 &lt; \/somewhere\/slackware-mkinitrd-dm-cache.patch<\/div><\/div>\n<\/li>\n<li>U\u017cywa\u0107 \ud83d\ude42<\/li>\n<\/ol>\n<h3>Spos\u00f3b dla leniwych \ud83d\ude42<\/h3>\n<p>\u015aci\u0105gnij <a href=\"https:\/\/majek.sh\/dm-cache\/lvm2-2.02.116-x86_64-1.txz\">m\u00f3j gotowy pakiet z lvm2<\/a> i zainstaluj\/uaktualnij obecny. Dodatkowo mo\u017cesz te\u017c potrzebowa\u0107 \u0142atk\u0119 na mkinitrd (zobacz punkt 7 powy\u017cej).<\/p>\n<h1>Konfiguracja<\/h1>\n<p>Tworzenie cache jest ca\u0142kiem dobrze opisane w <strong>man lvmcache<\/strong>.<br \/>\nSzybkie 'howto&#8217;, zak\u0142\u0105daj\u0105c \u017ce mam grup\u0119 nazwan\u0105 <strong>vg_group<\/strong>, dysk na cache (ssd) to  <strong>\/dev\/sdb1<\/strong> i wolumen do przyspieszenia, to <strong>lv_home<\/strong>.<\/p>\n<ol>\n<li>Na pocz\u0105tek, dysk ssd na cache musi by\u0107 cz\u0119\u015bci\u0105 volume grupy:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">vgextend vg_group \/dev\/sdb1<\/div><\/div>\n<\/li>\n<li>Tworzymy wolumen na cache na szybkim dysku (domy\u015blnym trybem jest <em>writethrough<\/em> &#8211; bezpieczniejszy, ale wolniejszy, wi\u0119c dla <em>writeback<\/em> trzeba doda\u0107 odpowiedni\u0105 opcj\u0119):\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">lvcreate --type cache-pool --cachemode writeback -L 10G -n cacheX vg_group \/dev\/sdb1<\/div><\/div>\n<\/li>\n<li>\u0141\u0105czymy wolumen cache z wolumenem do przyspieszenia:\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:550px;\"><div class=\"text codecolorer\">lvconvert --type cache --cachepool vg_group\/cacheX vg_group\/lv_home<\/div><\/div>\n<\/li>\n<li>Cieszymy si\u0119 \ud83d\ude42<\/li>\n<\/ol>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>bcache vs. dm-cache Testowa\u0142em bcache oko\u0142o roku temu na moim zapasowym serwerze i dzia\u0142a\u0142o to ca\u0142kiem nie\u017ale. Ale od tego czasu, z ka\u017cdym nowym kernelem pojawia\u0142y si\u0119 nowe, cz\u0119sto krytyczne problemy. Na li\u015bcie malingowej nawet sugerowano, \u017ceby bcache oznaczy\u0107 z <span class=\"excerpt-dots\">&hellip;<\/span> <a class=\"more-link\" href=\"https:\/\/majek.sh\/pl\/dm-cache-in-slackware\/\"><span class=\"more-msg\">Czytaj dalej &rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[65],"_links":{"self":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/1600"}],"collection":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/comments?post=1600"}],"version-history":[{"count":36,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/1600\/revisions"}],"predecessor-version":[{"id":1632,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/posts\/1600\/revisions\/1632"}],"wp:attachment":[{"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/media?parent=1600"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/categories?post=1600"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/majek.sh\/pl\/wp-json\/wp\/v2\/tags?post=1600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}