Možností nastavení je v současné době několik:
Tato konfigurace vyžaduje použití tří existujících oblastí. První představuje pomalé zařízení, tj. HDD, druhé cache, tj. SSD, a třetí obsahuje metadata, která popisují jaké bloky jsou cachovány. Metadata obsahují kromě provozních statistik i údaje o tom, zda jsou dané bloky uloženy na HDD, resp. zda vyžadují provedení zápisu na HDD. Tato oblast je proto kritická a měla by být provozována na spolehlivém zařízení.
Jedna z možných konfigurací může před HDD disk (/dev/md3) přeřazovat část SSD disku (/dev/md4), přičemž jeho začátek použije pro metadata. Určení konkrétních parametrů vychází z kapacit disků a může být následující:dmsetup create ssd-metadata --table '0 32024 linear /dev/md4 0' dmsetup create ssd-blocks --table '0 390427752 linear /dev/md4 32024' dmsetup create raid-cached --table '0 3515581440 cache /dev/mapper/ssd-metadata /dev/mapper/ssd-blocks /dev/md3 512 1 writeback default 0'Tyto operace je nutné provést při zavádění systému, což lze už snadno zrealizovat například pomocí RC-scriptu:
#!/bin/sh # # System startup script for DM-setup. # # ### BEGIN INIT INFO # Provides: dmsetup # Required-Start: $syslog $local_fs $network # Required-Stop: $syslog $local_fs $network # Default-Start: 3 5 # Default-Stop: 0 1 2 4 6 # Description: lg-dmsetup ### END INIT INFO ### BEGIN CHKCONFIG INFO # chkconfig: 2345 12 88 # description: Dmsetup - disk manager setup for disk array ### END CHKCONFIG INFO # Return values according to LSB for all commands except status: # 0 - success # 1 - generic or unspecified error # 2 - invalid or excess argument(s) # 3 - unimplemented feature (e.g. "reload") # 4 - insufficient privilege # 5 - program is not installed # 6 - program is not configured # 7 - program is not running # if [ -e /lib/lsb/init-functions ]; then # Debian, RHEL, Fedora, SLES and openSUSE. SYSTEMD_NO_WRAP="true" . /lib/lsb/init-functions else # Slackware (Gentoo has these functions). log_success_msg() { echo "$@" } log_failure_msg() { echo "$@" } fi PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin [ -x "$(which dmsetup)" ] || exit 5 if [ ! -e /lib/lsb/init-functions ]; then # Slackware and Gentoo. start_daemon() { start_lg_dmsetup } killproc() { echo "lg_dmsetup cannot be killed" } fi start_lg_dmsetup() { dmsetup create ssd-metadata --table '0 32024 linear /dev/md4 0' dmsetup create ssd-blocks --table '0 390427752 linear /dev/md4 32024' dmsetup create raid-cached --table '0 3515581440 cache /dev/mapper/ssd-metadata /dev/mapper/ssd-blocks /dev/md3 512 1 writeback default 0' } stop_lg_dmsetup() { echo "lg_dmsetup cannot be stopped" } rc=0 case "$1" in start) ## Start the service. echo -n "Loading and configuring lg_dmsetup" start_lg_dmsetup rc=$? ;; stop) ## Stop the service. echo -n "Stopping lg_dmsetup" stop_lg_dmsetup rc=$? ;; restart) ## Stop and restart the service if the service is already running, ## otherwise start the service. echo -n "Restarting lg_dmsetup" stop_lg_dmsetup && start_lg_dmsetup rc=$? ;; *) echo "Usage: $0 {start|stop|restart}" exit 2 ;; esac if [ $rc = 0 ]; then log_success_msg else log_failure_msg fi exit $rc
Získání parametrů a iniciální aktivace vyžaduje zvláštní postup. Nesmí zapomenout především na vyčištění oblasti s metadaty, což by mohlo jinak vést k nepredikovatelným výsledkům.
Zjistíme velikost v blocích používané SSD oblasti:blockdev --getsize64 /dev/md4 # ...velikost SSD svazku echo '199915405312 / 512' | bc -l # ...velikost v blocich - musi byt cele cislo bez desetinne tecky (390459776)Oblast s metadaty vyžaduje 4MB hlavičku a na každý cachovaný blok 16 bytů. Cachovaný blok může být například o velikosti 256kB, takže dostáváme:
echo '4194304 + (16 * 199915405312 / 262144)' | bc # ...planovana velikost metadat echo '16396172 / 512' | bc -l # ...v blocich, zaokrouhluje se nahoru (32024)Rozřízneme disk na oblast s metadaty a samotnou cache
# oblast pro metadata na zacatku disku dmsetup create ssd-metadata --table '0 32024 linear /dev/md4 0' # oblast pro data, v blocich echo '390459776 - 32024' | bc dmsetup create ssd-blocks --table '0 390427752 linear /dev/md4 32024'Nyní musíme vyčistit oblast s metadaty:
# vycisteni inicialni cache - datovy svazek pak zustane v puvodnim stavu dd if=/dev/zero of=/dev/mapper/ssd-metadataA nakonec svážeme cache s vlastním datovým prostorem, přičemž si nejprve zjistíme jeho velikost:
# prirazeni md4 k md3 blockdev --getsize64 /dev/md3 # ...velikost datoveho svazku echo '1799977697280 / 512' | bc # ...v blocich (3515581440)Samotnou vazbu, včetně volby typu cache, provedeme už jen závěrečným povelem pro DM:
dmsetup create raid-cached --table '0 3515581440 cache /dev/mapper/ssd-metadata /dev/mapper/ssd-blocks /dev/md3 512 1 writeback default 0'-- LeoGalambos - 05 Aug 2016