Работа с дисками

Материал из ALT Linux Wiki

Работа с дисками

См. также ТестированиеКомпьютера

Не рекомендуется использовать программы fdisk/cfdisk для первичного разбиения диска, один из разделов в котором предназначен для загрузки Windows. Используйте parted.

0. Создать загрузочную запись См. man ms-sys или sys в DOS/Win95/Win98 или fixboot в консоли восстановления 2003

1. Увидеть, что пишет система о дисках при загрузке

# dmesg | grep sd

или, на старых (< 2.6.18) ядрах

# dmesg | grep hd 

2. Вывести перечень всех разделов и всех дисков

# fdisk -l

либо команда

# blkid

3. Полная информация о диске

# hdparm -I /dev/sda

4. Вывести информацию о состоянии диска

# smartctl -a /dev/sda

Запустить внутренний тест диска

# smartctl -t short /dev/sda

или

# smartctl -t long /dev/sda

5. Программа работы с разделами диска

# parted /dev/sd? 

6. Программы восстановления потерянных разделов

# testdisk (более user-friendly)
# gpart (более могучая, но надо тщательно читать man)

7. Графическая программа для работы с разделами диска

$ qtparted 

8. Вывод температуры диска

# hddtemp /dev/sda

9. Простая программа работы с разделами диска

# cfdisk 

10. Восстановление файлов на разделе ext2

$ man recover

11. Сканирование диска на сбойные сектора (вместо badblocks)

# diskscan

12. Восстановление стёртых файлов с любых файловых систем

# photorec из пакета testdisk

Таблица соответствия устройств

Таблица соответствия IDE-устройств

Устройство Подключение
/dev/hda Master на IDE0 (Primary)
/dev/hdb Slave на IDE0 (Primary)
/dev/hdc Master на IDE1 (Secondary)
/dev/hdd Slave на IDE1 (Secondary)

Для SATA-устройств (так же как и для SCSI) чёткого порядка именования нет, устройствам выдаются имена sda,sdb,... в порядке их обнаружения системой.

Как пользоваться smartctl

# smartctl -a /dev/sda

Смотрим на следующие параметры:

  1 Raw_Read_Error_Rate     0x000b   100   100   051    Pre-fail Always       -       11
  5 Reallocated_Sector_Ct   0x0033   051   051   010    Pre-fail Always       -       101
  7 Seek_Error_Rate         0x000b   253   253   051    Pre-fail Always       -       0
197 Current_Pending_Sector  0x0033   253   253   010    Pre-fail Always       -       0
198 Offline_Uncorrectable   0x0031   253   253   010    Pre-fail Offline      -       0
200 Multi_Zone_Error_Rate   0x000b   100   100   051    Pre-fail Always       -       0
201 Soft_Read_Error_Rate    0x000b   100   100   051    Pre-fail Always       -       2

Если вкратце, то это все означает, что у вашего диска есть

проблемы

с поверхностью диска и часть секторов уже переназначена на запасные (параметр Reallocated_Sector_Count), а часть вообще потеряна (параметр Offline_Uncorrectable). Когда первый параметр достигнет нуля, есть большая вероятность появления bad секторов. Но эта вероятность есть и сейчас, поскольку нет 100% вероятности, что переназначенный сектор содержит ту же информацию, что и раньше. Я бы вам посоветовал озаботиться сохранением всех важных данных на более надежном носителе.

Надо сказать, что диск в подобном состоянии вполне еще может послужит в качестве дискеты и выбрасывать его рано :):)

  • Dmitry (Mothlike) Marochko
  • Vitaly Lipatov

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

На некотором оборудовании под управлением Альт могут появиться щелчки жесткого диска. Это звук парковки головок жесткого диска. Парковка является функцией контроллера жесткого диска, и производится с целью сбережения энергии и защиты головок от повреждений при ударах. Частая парковка головок приводит к увеличению счетчика S.M.A.R.T. Load_Cycle_Count, и, теоретически, может привести к сокращению ресурса жесткого диска. Проблема особенно характерна для дисков WD Green. Если диск всё время паркуется, а потом опять включается (слышно, что каждые 5-15 секунд щёлкает), нужно либо настроить ОС, чтобы не было принудительной парковки так часто, либо настроить диск, чтобы он не занимался (так часто) автопарковкой.

Проверить, есть ли проблема (smartctl работает от имени root):

$ su -
# smartctl -a /dev/sdX | grep Load_Cycle_Count

где sdX - имя нужного жесткого диска в системе.

На диске, на котором когда-то не сразу была выключена автопарковка, 241232 автопарковки:

193 Load_Cycle_Count        0x0032   120   120   000    Old_age   Always       -       241232

Hdparm

hdparm - программа для получения/установки параметров устройств SATA/IDE - из одноимённого пакета, которая поддерживает управление временем автопарковки:

Проверить, что установлено (hdparm работает от имени root):

$ su -
# hdparm -J /dev/sdX

Выключить:

# hdparm -J0 --please-destroy-my-drive /dev/sdX

Настройка диска (команда idle3ctl из пакета idle3-tools)

  1. idle3ctl -s 900 /dev/sda
  2. idle3ctl -d /dev/sda


Если указанный выше способ не сработал, можно отключить парковку головок жесткого диска через функцию APM (расширенного управления питанием) жесткого диска. Сначала нужно узнать, какой уровень управления энергопитанием установлен:

$ su -
# hdparm -B /dev/sdX

где sdX - имя нужного жесткого диска в системе.

Возможные значения варьируются от 1 до 254. Наивысшая степень управления питанием достигается при значении 1, а наивысшая производительность ввода-вывода - при значении 254. Значение 255 указывает hdparm на полное отключение расширенного управления питанием на диске (не все диски поддерживают его отключение, но большинство поддерживают).

Для отключения APM при загрузке — создаем исполняемый файл rc.local:

$ su - 
# echo '#!/bin/sh' > /etc/rc.d/rc.local
# chmod +x /etc/rc.d/rc.local

В этот файл добавляем строчку:

hdparm -B 254 /dev/sda

Для отключения APM при выходе из ждущего режима — создаем файл /etc/systemd/system/root-resume.service:

# touch /etc/systemd/system/root-resume.service

В этот файл добавляем строчки:

[Unit]
Description=Local system resume actions
After=suspend.target

[Service]
Type=simple
ExecStart=/sbin/hdparm -B 254 /dev/sda

[Install]
WantedBy=suspend.target

И выполняем команду:

# systemctl enable root-resume

Для отключения APM при выходе из спящего режима — создаем файл /etc/systemd/system/root-resume-sleep.service:

# touch /etc/systemd/system/root-resume-sleep.service

В этот файл добавляем строчки:

[Unit]
Description=Local system resume actions
After=hibernate.target

[Service]
Type=simple
ExecStart=/sbin/hdparm -B 254 /dev/sda

[Install]
WantedBy=hibernate.target

И выполняем команду:

# systemctl enable root-resume-sleep

Ссылки

FreeBSD

На FreeBSD нет hdparm (smartctl есть). Вместо него используйте rawio, iozone, or bonnie. Также в базовой системе есть команда diskinfo.