Архив метки: HDD

Шифрование данных в Linux

Использовать шифрование данных залог того что ваши данные не попадут в руки кому попало. В этой статье расскажу как производить шифрование диска или раздела в ОС Linux используется модуль ядра dm-crypt LUKS.

Введение

Чтобы выполнить шифрование диска в системе Linux используется модуль ядра dm-crypt. Этот модуль позволяет создавать в каталоге /dev/mapper виртуальное блочное устройство с возможностью его шифрования. Фактически все данные лежат на зашифрованном физическом разделе. Данные на лету шифруются и записываются на диск, при чтении с виртуального устройства, выполняется обратная операция — данные расшифровываются с физического диска и передаются в открытом виде через виртуальный диск пользователю. Обычно для шифрования используется протокол шифрования AES, потому что под него оптимизированы большинство современных процессоров.

Важно заметить, что вы можете шифровать не только разделы и диски, но и обычные файлы, создав в них файловую систему и подключив как loop устройство.

Для работы с LUKS и модулем dm-crypt используется утилита Cryptsetup.

Создание шифрованного устройства

Общая схема работы с шифрованным устройством следующая:

  • Определяется устройство для шифрования;
  • Создается шифрованный раздел;
  • Производится форматирование раздела в необходимую файловую систему;
  • Монтирование раздела в систему.

Установка CRYPTSETUP

Выберите свою команду исходя из своей системы и установите необходимую утилиту:

apt install cryptsetup

dnf install cryptsetup

Синтаксис запуска команды такой:

$ cryptsetup опции операция параметры_операции

Основные операции, которые можно сделать используя утилиту:

  • luksFormat — создать зашифрованный раздел luks linux;
  • luksOpen — подключить виртуальное устройство (нужен ключ);
  • luksClose — закрыть виртуальное устройство luks linux;
  • luksAddKey — добавить ключ шифрования;
  • luksRemoveKey — удалить ключ шифрования;
  • luksUUID — показать UUID раздела;
  • luksDump — создать резервную копию заголовков LUKS.

Подготовка устройства

Вначале необходимо вывести информацию об имеющихся дисках в системе:

fdisk -l
= вывод команды =
Диск /dev/sdb: 32 GiB, 6442450944 байт, 12582912 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт


Диск /dev/sda: 32 GiB, 34359738368 байт, 67108864 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xdbf480c5

Устр-во   Загрузочный начало  Конец    Секторы  Размер  Идентификатор  Тип
/dev/sda1 *           2048    2099199  2097152  1G      83             Linux
/dev/sda2             2099200 67108863 65009664 31G     8e             Linux LVM

В нашем случае это диск /dev/sdb. Можно весь диск зашифровать или сделать зашифрованным только какой то раздел.

Для работы с диском я использую утилиту cfdisk.

cfdisk /dev/sdb

= C параметром -z можно создать заново таблицу разделов =
cfdisk -z /dev/sdb

Создание шифрованного раздела

Создадим шифрованный раздел из всего диска sdb:

cryptsetup -y -v luksFormat /dev/sdb
= вывод команды =
ПРЕДУПРЕЖДЕНИЕ: Устройство /dev/sdb уже содержит подпись раздела «dos».
 
WARNING!
========
Данные на /dev/sdb будут перезаписаны без возможности восстановления.
 
Are you sure? (Type uppercase yes): YES - Внимание! Писать только заглавными буквами!
Введите парольную фразу для /dev/sdb: ! пароль
Парольная фраза повторно: ! повтор пароля
Existing 'dos' partition signature on device /dev/sdb will be wiped.
Создан слот ключа 0.
Команда выполнена успешно.

В данном примере я использую парольную фразу так как именно такой подход мне кажется наиболее правильным. При желании можно использовать ключевой файл вместо парольной фразы.

Откроем созданный раздел с помощью модуля dm-crypt в /dev/mapper, для этого понадобится ввести пароль, с которым выполнялось создание раздела:

cryptsetup luksOpen /dev/sdb sdb_crypt

Посмотрим созданное виртуальное устройство:

ls -l /dev/mapper/sdb_crypt
= вывод команды =
lrwxrwxrwx 1 root root 7 дек 27 21:53 /dev/mapper/sdb_crypt -> ../dm-3

Посмотреть состояние устройства можно выполнив команду:

cryptsetup -v status sdb_crypt
= вывод команды =
/dev/mapper/sdb_crypt is active.
type:    LUKS2
cipher:  aes-xts-plain64
keysize: 512 bits
key location: keyring
device:  /dev/sdb
sector size:  512
offset:  32768 sectors
size:    625109680 sectors
mode:    read/write
Команда выполнена успешно.

Рекомендую сделать резервную копию заголовков LUKS это может помочь при возможных в будущем проблем.

Делается резервная копия заголовка LUKS следующей командой:

cryptsetup luksDump /dev/sdb
= вывод команды =
LUKS header information
Version:       	2
Epoch:         	3
Metadata area: 	16384 [bytes]
Keyslots area: 	16744448 [bytes]
UUID:          	cf501772-dd9b-4554-bccc-7a6739e72142
Label:         	(no label)
Subsystem:     	(no subsystem)
Flags:       	(no flags)
 
Data segments:
  0: crypt
	offset: 16777216 [bytes]
	length: (whole device)
	cipher: aes-xts-plain64
	sector: 512 [bytes]
 
Keyslots:
  0: luks2
	Key:        512 bits
	Priority:   normal
	Cipher:     aes-xts-plain64
	Cipher key: 512 bits
	PBKDF:      argon2i
	Time cost:  4
	Memory:     903656
	Threads:    4
	Salt:       00 54 94 e7 r6 bb 00 ec 42 5a c9 81 7f d2 35 3d 
	            07 06 af 27 ac 15 80 5f 4f 29 37 ee 72 4b ff b8 
	AF stripes: 4000
	AF hash:    sha256
	Area offset:32768 [bytes]
	Area length:258048 [bytes]
	Digest ID:  0
Tokens:
Digests:
  0: pbkdf2
	Hash:       sha256
	Iterations: 89043
	Salt:       ac 7b 53 43 4b b3 82 77 07 64 35 35 0b 2f fb c8 
	            24 e0 ba 58 90 3d da 14 2f df 8e f0 fa a6 6a 76 
	Digest:     3f f1 07 4d 93 1b db ae 88 55 21 fa 9a ad a9 a2 
	            ba 77 48 8b 84 41 aw 3c 0d 9d 5e 33 ae e0 af 44

Форматирование

Для надежности, чтобы стереть все данные, которые были в этом месте раньше, перезапишем нулями перед тем как будем создавать файловую систему:

dd if=/dev/zero of=/dev/mapper/sdb_crypt

Работа утилиты может занять несколько часов, чтобы иметь возможность наблюдать за процессом, используйте pv:

pv -tpreb /dev/zero | dd of=/dev/mapper/sdb_crypt bs=128M

В случае отсутствия утилиты pv её необходимо установить. Для систем на базе Debian необходимо выполнить команду # apt install pv

Отформатировать можно в любую необходимую файловую систему. В нашем случае отформатируем в ext4:

mkfs.ext4 /dev/mapper/sdb_crypt

Монтирование

Создадим место куда будем монтировать и подмонтируем созданную файловую систему:

mkdir /mnt/sdb_crypt
mount /dev/mapper/sdb_crypt /mnt/sdb_crypt

= При необходимости можно дать полные права всем =
chmod 777 /mnt/sdb_crypt

Для проверки выполним команду которая покажет подмонтированые устройства в системе:

df -h
= вывод команды =
Файловая система         Размер   Использовано   Дост     Использовано%   Cмонтировано в
devtmpfs                 1,9G     0              1,9G     0%              /dev
tmpfs                    1,9G     0              1,9G     0%              /dev/shm
tmpfs                    1,9G     8,5M           1,9G     1%              /run
tmpfs                    1,9G     0              1,9G     0%              /sys/fs/cgroup
/dev/mapper/rl-root      28G      6,0G           22G      22%             /
/dev/sda1                1014M    334M           681M     33%             /boot
tmpfs                    374M     0              374M     0%              /run/user/0
/dev/mapper/sdb_crypt    32G      24M            32G      0%              /mnt/sdb_crypt

Для отключения необходимо отмонтировать файловую систему и шифрованный раздел:

umount /mnt/sdb_crypt
cryptsetup luksClose sdb_crypt

Чтобы снова получить возможность работать с зашифрованным разделом необходимо открыть шифрованый раздел и подмонтировать файловую систему:

cryptsetup luksOpen /dev/sdb sdb_crypt
mount /dev/mapper/sdb_crypt /mnt/sdb_crypt

Для удобства создадим два скрипта которые будут подключать и отключать шифрованное устройство.

Скрипт для подключения шифрованного устройства:

vim /root/start-sdb_crypt.sh
= необходимый код 
#!/bin/bash
cryptsetup luksOpen /dev/sdb sdb_crypt
mount /dev/mapper/sdb_crypt /mnt/sdb_crypt

Скрипт для отключения шифрованного устройства:

vim /root/stop-sdb_crypt.sh
= необходимый код =
#!/bin/bash
umount /mnt/sdb_crypt
cryptsetup luksClose sdb_crypt

Cделаем скрипты исполнительными выполнив необходимую команду:

chmod +x /root/start-sdb_crypt.sh
chmod +x /root/stop-sdb_crypt.sh

Обслуживание

Проверка файловой системы LUKS

После открытия раздела он воспринимается системой, как и все другие. Для проверки можно использовать утилиту fsck ( при условии что файловая система отмантирована ):

fsck -vy /dev/mapper/sdb_crypt

Изменение парольной фразы LUKS

Парольную фразу можно изменить или создать до восьми разных парольных фраз.

Перед началом обязательно сделайте резервную копию заголовков LUKS:

cryptsetup luksDump /dev/sdb

Команда для создания новой парольной фразы:

cryptsetup luksAddKey /dev/sdb
= вывод команды =
Введите любую существующую парольную фразу: ! вводим существующий пароль
Введите новую парольную фразу для слота ключа: ! вводим новый пароль
Парольная фраза повторно: ! повторяем новый пароль

Команда для удаления существующего пароля:

cryptsetup luksRemoveKey /dev/sdb
= вывод команды =
Введите удаляемую парольную фразу: ! вводим удаляемую парольную фразу

Заключение

Пользуюсь таким вариантом в работе уже давно и каких то проблем я не замечал.

Единственный минус заключается только в том что при перезагрузке системы приходится вручную подключать шифрованные разделы указывая пароль. Используя файл ключа шифрования можно настроить автоматическое монтирование шифрованного устройства, но тогда вообще пропадает смысл шифрования. Когда в системе с шифрованным устройством находится и сам ключ шифрования при правильных манипуляциях хороший специалист без проблем подключит шифрованный диск.

Решать в любом случае вам как защищать свои данные, но то что сейчас это надо делать обязательно актуально как никогда.

QNAP или сетевые хранилища

Восстановление работы сетевого накопителя QNAP при ошибках в работе. Удобство в работе с устройством очевидна.  Можете смело использовать, не тратя много времени на изучение и настройку аналогичных служб на других системах Linux.

Введение

Устройство QNAP долго работало, но в какой то момент оно отказывалось принимать соединения и доступ появлялся только после перезагрузки устройства. С горем пополам удалось подключится к устройству и посмотреть на проблемы. Никаких существенных ошибок в системе не присутствовало и определить причину по которой система перестаёт работать так и не удалось.

В новостях присутствовало обновление системы и установленных дополнений. После обновления всего и смены пароля администратора система напрочь отказалась пускать меня в веб-конфигуратор.

Система была установлена и настроена не мной и единственный вариант вернуть систему в строй это привести её в первоначальное заводское состояние, предварительно сохранив все данные с жёстких дисков.

Не нравятся мне эти системы применять у клиентов по причине кажущейся простате использования. Не важно какие у вас устройства и программное обеспечение работает в компании важно кто и как их обслуживает. Постоянный поиск дешёвых специалистов или надежда на рекламу о продуманности продукта часто ставят всю IP инфраструктуру предприятия в плохо работающую нестабильную систему, не говоря уже о безопасности сохранности данных.

Описание возможностей QNAP

Всю необходимую информацию вы можете найти перейдя на Oфициальную страницу продуктов .  Так же производители позаботились о поддержки своих продуктов и сделали Центр поддержки.

Возможности впечатляют своим многообразием, но имейте ввиду что для каждого случая использование выпускаются разные устройства и не надо модель рассчитанную для домашнего использования внедрять в организации и навешивать туда все службы и сервисы.

Система QNAP красивая и продуманная. К сожалению версии программ может и стабильные но старые. Версия PHP 5.6 и один этот факт говорит специалистам уже о многом.

Возврат к заводским настройкам QNAP

Производитель предусмотрел два варианта и это радует. Кнопка RESET у устройств QNAP находится сзади устройства.

Базовый сброс системы

Этот вариант хорош на случай когда вы забыли или просто не знаете пароль от системы, но при серьёзных проблемах он не поможет.

При нажатии на кнопку RESET (Сброс) и удержании ее 3 секунды прозвучит один звуковой сигнал.

После этого следующие настройки примут значения по умолчанию:

  • Пароль системного администратора: admin
  • Получить IP-адрес устройство будет автоматически по DCHP
  • Порт веб-администрирования: 8080
  • Безопасность: Разрешить все подключения

Другие настройки, ранее установленные программы и информация на жестких дисках, останутся без изменений.

Расширенный сброс системы 

При нажатии на кнопку RESET (Сброс) и удержании её в течении 10 секунд,  будут поданы два звуковых сигнала (на третьей и десятой секунде).

После этого выполняется сброс всех:

    • Файлов конфигурации устройства
    • Записей пользователей
    • Групп пользователей
    • Общедоступных папок пользователей

Все данные на NAS будут сохранены.

Для восстановления общедоступных сетевых папок после расширенного сброса системы воспользуйтесь следующей статьей: «На сетевом накопителе пропали все папки, созданные пользователями. Каким образом их можно восстановить?»

Вы конечно можете верить на слово производителям, но я старый перестраховщик и без резервирования всех важных данных никаких серьёзных действий с системами не делаю.

Как забрать данные с сетевого накопителя?

Как говорит пословица «Бережёного бог бережёт», а в нашем случае и кучу нервов потраченных при оправдании причины потери данных наработанных компанией за несколько лет.

Определение IP адреса

После сброса настроек устройство будет получать IP по DNCP. В моем варианте DNCP работает на системе CentOS 7 и для определения каким устройствам назначены адреса необходимо выполнить команду:

cat /var/lib/dhcpd/dhcpd.leases
= вывод необходимой части  =
lease 192.168.0.190 {
 starts 0 2018/04/29 05:34:03;
 ends 0 2018/05/06 05:34:03;
 cltt 0 2018/04/29 05:34:03;
 binding state active;
 next binding state free;
 rewind binding state free;
 hardware ethernet 00:08:9b:eb:5d:11;
 uid "\001\000\010\233\353]\021";
 client-hostname "NAS";
}

По названию накопителя и времени назначения адреса мы определили какой IP присвоен устройству.

Подключение к веб-конфигуратору

Зная IP  и то что после сброса все параметры стали стандартные, можно набрать в браузере адрес http://IP:8080 и увидеть страницу авторизации. К сожалению в моем случае страница появлялась, но при вводе логина и пароля показывало «Выполняется вход…» и ничего не происходило.

Каким то чудом один раз пустило, но после того как я поменял пароль администратора и перегрузился система напрочь отказалась меня пускать. Сброс настроек не помог.

Подключение по SSH

Если в настройках включена возможность подключатся по SSH или SFTP это здорово. Мне повезло и мне удалось скопировать все данные на внешний USB носитель используя консоль.

Подключится по SSH к устройствам QNAS сможете только под пользователем admin!

Подключимся и посмотрим на какой системе работает устройство:

ssh admin@192.168.0.190
[~] # uname –a 
BusyBox v1.24.1 (2018-04-13 02:36:31 CST) multi-call binary.

Как видим система BusyBox v1.24.1. Можно найти информацию о этой система и как с ней работать, но нам это не надо. Можно конечно убить кучу времени и разобраться что и как работает в системе, но это пустая трата времени. Наша задача забрать данные и попытаться восстановить работоспособность системы настраивая её только средствами веб-конфигуратора.

Имейте ввиду, что все стандартные команды системы Linux работаю если установлены необходимые службы. Того что есть достаточно для определения и сохранения того что надо.

Вначале я пытался монтировать нужную папку с данными через SSH, но система не позволяла это делать. Подключение через Shell-соединение… используя консольный MC происходит успешно, но все русскоязычные папки показывает абракадаброй и сохранить их нельзя.

Подключение USB накопителя

Согласно инструкции по системам QNAS автоматически монтируется только первый раздел имеющийся на подключаемом диске.

Подключаем внешний накопитель в USB порт и определяем как определился диск:

fdisk -l
= часть вывода команды =
Disk /dev/sde: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sde1 1 38914 312568664+ 7 HPFS/NTFS

Видим что диск появился и имеет один раздел с файловой системой NTFS.

Копирование данных

Все предварительные действия сделаны. Необходимо определиться, что и куда надо копировать.

Для начала посмотрим что монтировано в системе:

mount 
= вывод команды =
none on /new_root type tmpfs (rw,mode=0755,size=221184k)
/proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw)
sysfs on /sys type sysfs (rw)
tmpfs on /tmp type tmpfs (rw,size=64M)
tmpfs on /dev/shm type tmpfs (rw)
tmpfs on /share type tmpfs (rw,size=16M)
tmpfs on /mnt/snapshot/export type tmpfs (rw,size=16M)
/dev/md9 on /mnt/HDA_ROOT type ext3 (rw,data=ordered)
cgroup_root on /sys/fs/cgroup type tmpfs (rw)
none on /sys/fs/cgroup/memory type cgroup (rw,memory)
/dev/mapper/cachedev1 on /share/CACHEDEV1_DATA type ext4 (rw,usrjquota=aquota.user,jqfmt=vfsv0,user_xattr,data=ordered,data_err=abort,delalloc,acl,nodiscard,nopriv)
/dev/md13 on /mnt/ext type ext4 (rw,data=ordered,barrier=1,nodelalloc)
nfsd on /proc/fs/nfsd type nfsd (rw)
tmpfs on /mnt/rf/nd type tmpfs (rw,size=1m)
/dev/sdd on /share/external/DEV3303_-1 type iso9660 (ro)
/dev/sde1 on /share/external/DEV3302_1 type ufsd (rw,iocharset=utf8,dmask=0000,fmask=0111,force,sparse)

Видим куда монитровался наш USB накопитель.

Для дальнейших действий нам надо определить где находятся нужные данные и какого размера. Выведем подробную информацию:

df -h
= вывод команды =
Filesystem Size Used Available Use% Mounted on
none 216.0M 202.8M 13.2M 94% /
devtmpfs 432.3M 8.0K 432.3M 0% /dev
tmpfs 64.0M 272.0K 63.7M 0% /tmp
tmpfs 439.8M 24.0K 439.8M 0% /dev/shm
tmpfs 16.0M 0 16.0M 0% /share
tmpfs 16.0M 0 16.0M 0% /mnt/snapshot/export
/dev/md9 493.5M 124.2M 369.2M 25% /mnt/HDA_ROOT
cgroup_root 439.8M 0 439.8M 0% /sys/fs/cgroup
/dev/mapper/cachedev1
 898.3G 126.1G 771.7G 14% /share/CACHEDEV1_DATA
/dev/md13 355.0M 345.6M 9.3M 97% /mnt/ext
tmpfs 1.0M 0 1.0M 0% /mnt/rf/nd
/dev/sdd 290.0M 290.0M 0 100% /share/external/DEV3303_-1
/dev/sde1 298.1G 166.1G 132.0G 56% /share/external/DEV3302_1

Из вывода видно что все файлы что нам надо находятся в папке /share/CACHEDEV1_DATA, а то куда нам надо скопировать в папке /share/external/DEV3302_1. Проанализировав объем данных которые надо сохранить и свободное место мы видим что места хватает.

Посмотрим что находится в копируемой папке. Перейдём в необходимую папку и выведем содержимое:

[~] # cd /share/CACHEDEV1_DATA/ 
[/share/CACHEDEV1_DATA] # ls -l
total 128
-rw------- 1 admin administrators 8192 2016-02-07 19:49 aquota.user
drwxrwxrwx 6 admin administrators 4096 2018-02-09 11:23 BUH/
drwxrwxrwx 14 admin administrators 4096 2018-04-26 13:56 ConsultantPlus/
drwxrwxrwx 5 admin administrators 4096 2017-08-17 08:32 Download/
drwxrwxrwx 2 admin administrators 4096 2016-04-30 22:51 FTP/
drwxrwxrwx 8 admin administrators 4096 2018-04-08 15:12 homes/
drwx------ 2 admin administrators 16384 2016-02-07 19:49 lost+found/
drwxrwxrwx 9 admin administrators 4096 2017-02-07 17:15 Multimedia/
drwxrwxrwt 6 admin administrators 4096 2018-01-12 21:00 Programs/
drwxrwxrwx 3 admin administrators 4096 2018-04-29 08:33 Public/
drwxrwxrwx 3 admin administrators 4096 2016-02-07 19:50 Recordings/
drwxrwxrwx 4 admin administrators 4096 2016-09-30 11:31 Technique/
drwxrwxrwx 4 admin administrators 4096 2016-04-30 20:40 Unloading/
drwxrwxrwx 31 admin administrators 4096 2018-04-13 15:40 Users/
drwxrwxrwx 3 admin administrators 4096 2018-04-29 08:39 Web/

Именно это нам надо сохранить.

Создадим папку под бэкап и скопируем туда все данные:

mkdir /share/external/DEV3302_1/backup_sevo44/
= Процесс копирования не быстрый и ждём пока не появится приглашение консоли =
cp -r /share/CACHEDEV1_DATA/ /share/external/DEV3302_1/backup_sevo44/
[~] #

После копирования обязательно подключите диск к своему компьютеру и проверте правильность скопированных данных!

Вывод

Расширенный сброс QNAP действительно не испортил данные и устройство заработало как надо.

Удобство в работе с устройством очевидна и если она вас устраивает можете смело применять не тратя кучу времени на развёртывание аналогичных сервисов на свободных системах. Столкнись я с этой системой не зная системы Linux я вряд ли бы смог что то сделать без обращения в службу поддержки. Для дома эти устройства просто идеальны, а вот говорить о выгодности и удобстве использование на предприятиях я бы не стал.

Проверка диска в консоли Linux

Проверка диска на наличие плохих секторов возникает нежданно и лучше знать как это сделать имея под рукой всё необходимое. Вариантов проверки дисков множество. Расскажу о проверке средствами консоли Linux. Просто и ничего лишнего.

Причины для проверки диска

Основная причина проверки это как правило медленная работа системы или зависание при определенных действиях. Вывести диск из строя могут разные факторы. Вот некоторые из них:

  • Время жизни диска не вечна;
  • Некорректные выключения системы при пропадании питания;
  • Физические удары;
  • Запуск холодного диска зимой.

Самое лучшее это периодически проверять диск просто так. На ранней стадии обнаружения гораздо больше шансов сохранить важные данные.

Храните важные данные в двух совершенно разных физически местах. Только такой подход гарантирует вам полную сохранность данных.

Определение диска для проверки

Для того чтобы понять какой диск проверять нам достаточно ввести команду в консоли которая выдаст нам список всех имеющихся дисков в системе.

fdisk -l
= вывод части команды =
Диск /dev/sda: 232.9 GiB, 250059350016 байт, 488397168 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x42ef42ef

Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1 * 2048 184322047 184320000    87.9G 7 HPFS/NTFS/exFAT
/dev/sda2 184322048 488394751 304072704 145G  7 HPFS/NTFS/exFAT

Мы видим в выводе диск который нам надо проверить. Диск имеет 2 раздела с данными.

Проверка диска на битые секторы

Перед проверкой разделы необходимо отмонтировать. Как правило я загружаю операционную систему на базе Linux c Live образа или использую подготовленный PXE сервер на котором присутствуют и другие программы для проверки жестких дисков.

Можно сразу запустить проверку с исправлением, но мне кажется это неправильно. Гораздо логичней вначале проверить диск и собрать информацию обо всех битых секторах и только после этого принять решение о дальнейшей судьбе диска.

При появлении хотя бы нескольких плохих секторов я больше диск не использую. Пометку плохих секторов с попыткой забрать из них информацию использую только для того чтобы сохранить данные на другой диск.

Создание файла для записи плохих секторов

Создадим файл указав для удобства имя проверяемого раздела.

touch "/root/bad-sda1.list"

Проверка диска утилитой badblocks

Запустим проверку с информацией о ходе процесса с подробным выводом. Чем больше диск тем дольше проверка!

badblocks -sv /dev/sda1 > /root/bad-sda1.list
= Информация о ходе процесса = 
badblocks -sv /dev/sda1 > /root/bad-sda1.list Checking blocks 0 to 976761542 Checking for bad blocks (read-only test): 0.91% done, 1:43 elapsed. (0/0/0 errors)
= Подробный вывод результата =
badblocks -sv /dev/sda1 > /root/bad-sda1.list Checking blocks 0 to 156289862 Checking for bad blocks (read-only test): done             Pass completed, 8 bad blocks found. (8/0/0 errors)

В нашем случае диск с 8 плохими секторами.

Пометка плохих секторов диска

Запустим утилиту e2fsck, указав ей список битых секторов. Программа пометит плохие сектора  и попытается восстановить данные.

Указывать формат файловой системы нет надобности. Утилита сделает всё сама.

e2fsck -l /root/bad-sda1.list /dev/sda1
= Вывод команды =
e2fsck -l /root/bad-sda1.list /dev/sda1e2fsck 1.43.3 (04-Sep-2016)
Bad block 44661688 out of range; ignored.
Bad block 44661689 out of range; ignored.
Bad block 44661690 out of range; ignored.
Bad block 44911919 out of range; ignored.
Bad block 44958212 out of range; ignored.
Bad block 44958213 out of range; ignored.
Bad block 44958214 out of range; ignored.
Bad block 44958215 out of range; ignored.
/dev/sda1: Updating bad block inode.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda1: 11/9773056 files (0.0% non-contiguous), 891013/39072465 blocks

Подготовка диска для проверки

Бывают случаи когда таблица разделов повреждена на диске и нет возможности посмотреть какие есть разделы с данными. Возможно вам не надо никаких данных на диске и вы хотите диск отформатировать и затем проверить. Случаи бывают разные и надо подходить исходя из ситуации.

С помощью команды с ключом -z вы сможете создать заново таблицу разделов и создать необходимые вам разделы.

cfdisk -z /dev/sda

Как работать с утилитой cfdisk я не буду объяснять, так как это выходит за рамки данной статьи.

Предположим что вы создали из всего диска лишь один раздел /dev/sda1. Для форматирования его в ext4 достаточно выполнить команду:

mkfs.ext4 /dev/sda1
= Вывод команды =
mke2fs 1.43.3 (04-Sep-2016)Creating filesystem with 244190385 4k blocks and 61054976 inodesFilesystem UUID: c4a1eeed-960a-4aea-a5ff-02ce93bf0a2eSuperblock backups stored on blocks:  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,  4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,  102400000, 214990848
Allocating group tables: done                            
Writing inode tables: done                           
Creating journal (262144 blocks): doneWriting superblocks and filesystem accounting information: done

Вывод

Проще и понятней механизма проверки диска на битые сектора как в системе Linux я не встречал. Ничего лишнего только суть. Выбор варианта как проверять и когда всегда за вами. После того как я один раз потерял важные данные храню всё важное в 3 разных местах.