Зајакнете го складирањето на Linux: LVM, енкрипција, снимки, SMART и тестирани обновувања
Здравиот датотечен систем сè уште може да изгуби податоци. Чист SMART извештај може да му претходи на катастрофа на ниво на апликација. Шифриран диск може да заштити украден хардвер, а да не направи ништо за случајно бришење. Доверливоста на складирањето произлегува од слоеви чии начини на откажување се преклопуваат, без да се преправаат дека се заменуваат меѓусебно.
Овој водич гради продукциски ориентиран стек за складирање околу посветен диск за податоци од 128 GiB: шифрирање LUKS2, распределба со LVM, ext4 волумен за апликацијата, краткотрајни снимки, резервни копии надвор од хостот, SMART надзор и редовни тестови за враќање. Командите користат /dev/vdb во виртуелна машина за еднократна употреба. На физички хардвер, користете ја стабилната патека пријавена во /dev/disk/by-id/.
Предупредување: командите за форматирање подолу уништуваат податоци на
/dev/vdb. Прво вежбајте во виртуелна машина. Никогаш не копирајте патека до уред од статија во продукција без самостојно да ги потврдите неговиот модел, сериски број, големина и тековни монтирања.
Архитектура и компромиси
Добиената патека е намерно едноставна:
physical disk /dev/vdb
└── LUKS2 container: cryptdata
└── LVM physical volume
└── volume group: vg_secure
├── logical volume: appdata, 64 GiB
├── temporary snapshot: appdata_snap, 16 GiB
└── temporary restore-test volume: restore_test, 48 GiB
Шифрирањето се наоѓа под LVM, па имињата на логичките волумени и метаподатоците за распределба се скриени додека машината е исклучена. LVM обезбедува флексибилен капацитет и снимки. Ext4 нуди предвидливи алатки за обновување. Посебно шифрирана, независно монтирана резервна цел на /mnt/backup ги чува архивите откако ќе се отстранат снимките.
LVM снимките користат складирање copy-on-write. Тие не се резервни копии: го делат изворниот диск, трошат капацитет додека се менуваат блокови и стануваат невалидни ако им се пополни доделениот простор за исклучоци. Нивната задача тука е да прикажат стабилна, краткотрајна состојба додека архивата се копира на друго место.
Снимката е конзистентна при пад, но не и автоматски конзистентна за апликацијата. Датотечните системи остануваат структурно обновливи, но на базата на податоци може да ѝ треба сопствена команда за резервна копија, контролна точка или кратко запирање на запишувањата. Не замрзнувајте зафатен датотечен систем за времетраењето на голема архива.
Предуслови и структура на проектот
Извршувајте ги командите на хостот со сметка што може да користи sudo. Инсталирајте ги пакетите на дистрибуцијата што обезбедуваат cryptsetup, LVM2, ext4 алатки, GNU tar, gzip, util-linux и smartmontools. Потврдете дека /mnt/backup е различен датотечен систем поддржан од посебно или оддалечено складирање.
sudo apt-get update
sudo apt-get install cryptsetup lvm2 e2fsprogs smartmontools acl
sudo install -d -m 0750 /srv/appdata
sudo install -d -m 0750 /mnt/backup
sudo install -d -m 0750 /mnt/restore-test
sudo install -d -m 0750 /usr/local/lib/storage
sudo install -d -m 0750 /var/log/storage
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIAL
findmnt --target /mnt/backup
Завршениот систем ги користи следниве оперативни патеки:
/srv/appdataза активни податоци на апликацијата/mnt/backup/appdataза независно заштитени архиви/usr/local/lib/storage/backup-appdataза задачата за резервна копија/mnt/restore-testза вежби за обновување за еднократна употреба/etc/crypttabи/etc/fstabза активирање при подигнување
На системи базирани на RPM, користете ги соодветниот менаџер на пакети и имиња на пакети. Инсталацијата на пакети е единствениот дел од основниот дизајн зависен од дистрибуцијата.
Изградете го шифрираниот LVM стек
Докажете дека целта е безбедна
Во лабораториската VM, барајте дискот да биде точно очекуваниот немонтиран блок-уред. Овие проверки намерно се одвоени од деструктивната команда, за нивниот излез да може да се прегледа.
DATA_DISK=/dev/vdb
test -b "$DATA_DISK"
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIAL "$DATA_DISK"
sudo wipefs --no-act "$DATA_DISK"
sudo blkid "$DATA_DISK" || true
findmnt --source "$DATA_DISK" || true
Запрете ако уредот содржи потписи, партиции, монтирани датотечни системи или неочекувана големина. Продукцискиот диск треба да се повикува преку неговата потврдена симболичка врска /dev/disk/by-id/, а не преку име /dev/sdX што потенцијално се менува.
Создадете LUKS2, LVM и ext4
Следниот блок е деструктивен. cryptsetup luksFormat бара изречна потврда и лозинка. Мапирањето останува отворено на /dev/mapper/cryptdata сè додека не се затвори или машината не се исклучи.
DATA_DISK=/dev/vdb
sudo cryptsetup luksFormat --type luks2 "$DATA_DISK"
sudo cryptsetup open "$DATA_DISK" cryptdata
sudo pvcreate /dev/mapper/cryptdata
sudo vgcreate vg_secure /dev/mapper/cryptdata
sudo lvcreate --size 64G --name appdata vg_secure
sudo mkfs.ext4 -L appdata /dev/vg_secure/appdata
sudo mount /dev/vg_secure/appdata /srv/appdata
sudo install -d -m 0750 /srv/appdata/health
printf '%s\n' 'storage-restore-sentinel-v1' |
sudo tee /srv/appdata/health/restore-sentinel.txt >/dev/null
sudo pvs
sudo vgs
sudo lvs -o lv_name,vg_name,lv_size,origin,data_percent
findmnt /srv/appdata
Првично се доделени само 64 GiB. Преостанатите екстенти се оперативна резерва за снимки, вежби за обновување и контролирано проширување. Доделувањето на целата група волумени уште првиот ден отстранува голем дел од вредноста на LVM.
Конфигурирајте активирање при подигнување
Користете UUID-и за промените во имињата на уредите да не го нарушат подигнувањето. Следново додава записи само ако нивните UUID-и отсуствуваат. Прегледајте ги двете датотеки пред рестартирање.
DATA_DISK=/dev/vdb
CRYPT_UUID=$(sudo cryptsetup luksUUID "$DATA_DISK")
FS_UUID=$(sudo blkid -s UUID -o value /dev/vg_secure/appdata)
sudo grep -q "UUID=$CRYPT_UUID" /etc/crypttab ||
printf 'cryptdata UUID=%s none luks\n' "$CRYPT_UUID" |
sudo tee -a /etc/crypttab
sudo grep -q "UUID=$FS_UUID" /etc/fstab ||
printf 'UUID=%s /srv/appdata ext4 defaults,nodev,nosuid 0 2\n' "$FS_UUID" |
sudo tee -a /etc/fstab
sudo cryptsetup luksDump "$DATA_DISK"
sudo findmnt --verify
sudo systemctl daemon-reload
Опциите nodev и nosuid го намалуваат ризикот за податоците на апликацијата. Додајте noexec само ако работното оптоварување никогаш не извршува бинарни датотеки или скрипти од овој волумен. Конфигурацијата користи интерактивна лозинка при подигнување; серверите без надзор треба да користат дизајн за отклучување одобрен од организацијата, со TPM, мрежно врзување или хардверска поддршка и со документиран клуч за обновување.
Создадете конзистентни резервни копии со снимки
Целта за резервна копија мора веќе да биде монтирана. Скриптата одбива да запишува во коренскиот датотечен систем ако тоа монтирање исчезне, зема ексклузивно заклучување, создава една снимка, ја монтира без повторно репродуцирање на ext4 журналот, атомски запишува компресирана архива и секогаш чисти по себе.
#!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_ROOT=/mnt/backup/appdata
SNAP_MOUNT=/run/appdata-snapshot
SNAP_LV=/dev/vg_secure/appdata_snap
SOURCE_LV=/dev/vg_secure/appdata
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
FINAL="$BACKUP_ROOT/appdata-$STAMP.tar.gz"
PARTIAL="$FINAL.partial"
exec 9>/run/lock/appdata-backup.lock
flock -n 9 || { echo "backup already running" >&2; exit 1; }
mountpoint -q /mnt/backup ||
{ echo "/mnt/backup is not mounted" >&2; exit 1; }
test "$(findmnt -n -o SOURCE /mnt/backup)" != "/dev/vg_secure/appdata" ||
{ echo "backup target is the source volume" >&2; exit 1; }
install -d -m 0750 "$BACKUP_ROOT" "$SNAP_MOUNT"
cleanup() {
mountpoint -q "$SNAP_MOUNT" && umount "$SNAP_MOUNT" || true
lvs vg_secure/appdata_snap >/dev/null 2>&1 &&
lvremove --yes "$SNAP_LV" || true
rm -f "$PARTIAL"
}
trap cleanup EXIT
lvcreate --snapshot --size 16G --name appdata_snap "$SOURCE_LV"
mount -o ro,noload "$SNAP_LV" "$SNAP_MOUNT"
tar --acls --xattrs --numeric-owner --one-file-system \
-C "$SNAP_MOUNT" -cf - . | gzip -1 >"$PARTIAL"
gzip -t "$PARTIAL"
mv "$PARTIAL" "$FINAL"
sha256sum "$FINAL" >"$FINAL.sha256"
echo "created $FINAL"
Инсталирајте ја таа содржина како /usr/local/lib/storage/backup-appdata, во сопственост на root со режим 0750. Извршувајте ја како root преку systemd тајмер или постоечки распоредувач. Не ставајте LUKS лозинка во скриптата.
Снимка од 16 GiB може да зачува приближно толку изменети блок-податоци додека трае архивирањето; големината на архивата е ирелевантна. Набљудувајте го Data% за време на првите продукциски извршувања. Ако интензитетот на запишување се приближува до капацитетот на снимката, зголемете ја, скратете ја задачата, користете инкрементални резервни копии својствени за апликацијата или преместете ги резервните копии на реплика.
Надгледувајте медиум, капацитет и притисок од снимки
SMART го набљудува физичкиот уред под шифрирањето. Прво потврдете дека контролерот изложува значајни податоци:
sudo smartctl --health /dev/vdb
sudo smartctl --all /dev/vdb
sudo systemctl enable --now smartd
sudo journalctl -u smartd --since today
sudo vgs -o vg_name,vg_size,vg_free
sudo lvs -a -o lv_name,lv_size,origin,data_percent,metadata_percent
df -h /srv/appdata /mnt/backup
sudo cryptsetup status cryptdata
Virtio дисковите можеби не ја изложуваат SMART телеметријата на хостот на гостинскиот систем; наместо тоа, надгледувајте го физичкиот уред на хипервизорот. Контролерите за хардверски RAID може да бараат избор на уред специфичен за контролерот. Успешно извршена команда не е доказ дека прикажаните броила го опишуваат основниот медиум.
Конфигурирајте smartd користејќи ја стабилната патека до физичкиот уред на вистински хост. Задржете го неговото стандардно евидентирање во системскиот журнал и поврзете ги известувањата од журналот со системот за надзор кој веќе е одговорен за повикување. Надгледувајте барем искористеност на датотечниот систем, слободни екстенти во групата волумени, старост на резервната копија, неуспеси при верификација на архивата, I/O грешки на јадрото, промени во SMART здравјето и Data% на снимката.
Предупредувањата за капацитет бараат време за дејствување. Сметајте ги исцрпувањето на групата волумени и на резервната цел како одделни ризици. LVM не може да создаде волумен за тестирање на обновување само затоа што датотечниот систем пријавува слободен простор; му се потребни недоделени екстенти во групата волумени.
Извршете вистинска вежба за обновување
Архивата е само тврдење сè додека не биде распакувана и прегледана. Извршете го ова откако скриптата за резервна копија ќе ја отстрани својата снимка. Тест-волуменот од 48 GiB се вклопува покрај активниот волумен од 64 GiB во примерот со диск од 128 GiB, земајќи ги предвид метаподатоците за шифрирањето и LVM.
BACKUP_ROOT=/mnt/backup/appdata
ARCHIVE=$(find "$BACKUP_ROOT" -maxdepth 1 -type f \
-name 'appdata-*.tar.gz' -printf '%T@ %p\n' |
sort -n | tail -1 | cut -d' ' ' -f2-)
test -n "$ARCHIVE"
cd "$BACKUP_ROOT"
sha256sum --check "$(basename "$ARCHIVE").sha256"
gzip -t "$ARCHIVE"
sudo lvcreate --size 48G --name restore_test vg_secure
sudo mkfs.ext4 -L restore_test /dev/vg_secure/restore_test
sudo mount -o nodev,nosuid /dev/vg_secure/restore_test /mnt/restore-test
sudo tar --acls --xattrs --numeric-owner \
-xzf "$ARCHIVE" -C /mnt/restore-test
sudo test "$(sudo cat /mnt/restore-test/health/restore-sentinel.txt)" = \
"storage-restore-sentinel-v1"
sudo find /mnt/restore-test -xdev -type f | wc -l
sudo du -sh /mnt/restore-test
findmnt /mnt/restore-test
Заменете ја проверката само со sentinel со валидација свесна за работното оптоварување: отворете обновени репозиториуми, валидирајте медиуми, извршете механизам за база на податоци врз неговата поддржана логичка резервна копија или стартувајте изолирана инстанца на апликацијата со блокиран излезен мрежен пристап. Никогаш не насочувајте тест за обновување кон продукциски акредитиви, редици, вебхукови или системи за е-пошта.
По евидентирањето на резултатот, безбедно отстранете го волуменот за еднократна употреба:
sudo umount /mnt/restore-test
sudo e2fsck -f /dev/vg_secure/restore_test
sudo lvremove --yes /dev/vg_secure/restore_test
sudo lvs
sudo vgs
e2fsck се извршува само додека датотечниот систем не е монтиран. Неговиот успех ја потврдува структурата на датотечниот систем, додека проверките на апликацијата потврдуваат дека обновената содржина е корисна. И двете се важни.
Безбедност, перформанси и дисциплина при распоредување
LUKS ги заштитува податоците во мирување, а не податоците на отклучена машина. Ограничете го root пристапот, заштитете ги клучевите за обновување одделно, ажурирајте ги јадрото и алатките за складирање и одржувајте го шифрирањето на резервните копии независно од изворниот диск. Ако и изворот и резервната копија се отклучуваат автоматски со истиот хост, кражбата или компромитирањето може да ги порази двата слоја.
Не изложувајте услуги за управување со складирањето преку заштитниот ѕид. Дизајнот не отвора мрежна порта. Ако /mnt/backup користи NFS, SSH или синхронизација со object storage, дозволете ја само потребната цел, автентицирајте се со идентитет со тесен опсег и спречете сметката на апликацијата да брише историски резервни копии.
Нивото на компресија еден намерно дава предност на пократок век на снимката наместо на максимална компресија. Измерете ги траењето на архивирањето, интензитетот на запишување, оптоварувањето на CPU и пропусноста на одредиштето пред да го менувате. SSD discard може да го подобри долгорочното однесување, но преку шифрирањето открива шеми на распределба; овозможете го само по проценка на уредот, моделот на закани и очекувањата за санација.
Распоредувајте по фази: вежбајте уништување и обновување во VM, изградете го продукцискиот волумен користејќи потврдена стабилна патека до уредот, извршете рачна резервна копија, прегледајте ја потрошувачката на снимката, обновете во изолиран LV, рестартирајте во прозорец за одржување и потврдете автоматско отклучување и монтирање. Закажете повторливи вежби за обновување, а не само повторливи резервни копии.
Вообичаени неуспеси за кои вреди да се планира
- Снимката достигнува 100%: станува неупотреблива. Отстранете ја, зачувајте го изворниот волумен, зголемете ја резервата и повторно извршете ја резервната копија.
- Монтирањето за резервната копија исчезнува: без проверката на точката на монтирање, архивите би можеле да го наполнат коренскиот датотечен систем. Задржете го одбивачкото однесување.
- Подигнувањето влегува во итен режим: проверете ги
/etc/crypttab, UUID-ите, достапноста на клучот и редоследот во/etc/fstabод медиум за обновување. - SMART пријавува неподдржано: прашајте го физичкиот хост или конфигурирајте го точниот тип на уред специфичен за контролерот, наместо да ја сметате недостапната телеметрија за добро здравје.
- Базата на податоци се обновува неконзистентно: користете го нејзиниот документиран логички или физички механизам за резервни копии; снимка на датотечен систем конзистентна при пад не може да создаде трансакциски гаранции што апликацијата не ги обезбедува.
- LV за обновување не може да се создаде: проверете го
vgs. Слободниот простор воappdataне е слободен простор воvg_secure.
Конечна контролна листа за верификација
- Продукцискиот уред е идентификуван со потврден модел, сериски број, големина и стабилна патека.
- Материјалот за LUKS обновување се чува одделно и е тестиран.
/srv/appdataсе монтира по контролирано рестартирање со предвидените опции за зацврстување.- Групата волумени задржува доволно слободни екстенти за снимки и вежби за обновување.
- Целта за резервна копија е независна, шифрирана, со надгледуван капацитет и заштитена од бришење од апликацијата.
- Најновата архива ги поминува тестовите за контролна сума и компресија.
- Обновената копија ги поминува валидациите на датотечниот систем и специфичните за работното оптоварување.
- SMART, I/O грешките на јадрото, капацитетот, притисокот од снимки и староста на резервната копија стигнуваат до оперативниот систем за предупредување.
- Вежбите за обновување имаат сопственик, распоред, евидентирано траење и документирана постапка за обновување.
Запамтливата единица на доверливост на складирањето не е дискот, волуменот, снимката или архивата. Таа е потврдената патека за обновување. Шифрирањето ја ограничува изложеноста, LVM создава простор за маневрирање, SMART дава несовршени рани сигнали, а резервните копии ја зачувуваат историјата. Само тестираното обновување ги претвора тие корисни механизми во доверба.