Утилита sg_format: полное руководство по низкоуровневому форматированию SCSI-дисков и лент
sg_format — это мощная утилита из пакета sg3_utils, предназначенная для низкоуровневого форматирования SCSI-устройств: дисков (HDD, SSD), ленточных накопителей и других накопителей, использующих набор команд SCSI. Она поддерживает изменение размера блока данных (block size) и количества доступных блоков (resize), позволяет использовать различные команды форматирования и предоставляет детальный контроль над процессом.
В этом руководстве вы найдёте полный список команд sg_format, примеры использования для различных задач, инструкции по загрузке и установке пакета sg3_utils для Linux, Windows, DOS и UEFI Shell, а также советы по безопасной работе с утилитой.
1. Основные возможности sg_format
Утилита отправляет устройству одну из трёх SCSI-команд: FORMAT UNIT (основная для дисков), FORMAT MEDIUM (для лент) или FORMAT WITH PRESET. Основные функции:
- Низкоуровневое форматирование диска — полная перезапись служебных областей (замена дефектных секторов, подготовка поверхности).
- Изменение размера блока (block size) — установка нестандартных секторов (например, 4096 байт вместо 512), если это поддерживается диском.
- Изменение количества блоков (resizing) — уменьшение ёмкости диска (short stroking) или изменение числа доступных блоков без изменения их размера.
- Форматирование ленточных накопителей — подготовка тома (с возможным разбиением на разделы).
- Просмотр текущих параметров — без опций утилита выводит текущий размер блока и количество блоков из ответов команд MODE SENSE и READ CAPACITY.
2. Загрузка и установка sg3_utils (включая sg_format)
Утилита sg_format входит в состав пакета sg3_utils. Скачать официальные версии можно с сайта: https://sg.danny.cz/sg/sg3_utils.html. Пакет поставляется в виде исходных кодов и бинарных сборок для разных ОС.
+------------------------+-----------------------------------------------------------+
| Платформа | Установка / запуск sg3_utils |
+------------------------+-----------------------------------------------------------+
| Linux | # Установка из репозиториев: |
| (Debian/Ubuntu) | sudo apt update && sudo apt install sg3-utils |
| | # Установка из исходников: |
| | wget https://sg.danny.cz/sg/p/sg3_utils-1.48.tar.gz |
| | tar -xzf sg3_utils-1.48.tar.gz |
| | cd sg3_utils-1.48 |
| | ./configure && make && sudo make install |
+------------------------+-----------------------------------------------------------+
| RHEL / CentOS / Fedora | sudo yum install sg3_utils (или dnf) |
+------------------------+-----------------------------------------------------------+
| Windows | Скачать готовый exe: |
| | https://sg.danny.cz/sg/p/sg3_utils-1.48_win32.zip |
| | Распаковать в папку, запускать из командной строки: |
| | sg_format.exe --help |
+------------------------+-----------------------------------------------------------+
| DOS | Пакет sg3_utils не имеет родной DOS-версии. |
| | Обходной путь: создать загрузочную флешку с FreeDOS, |
| | затем скопировать туда утилиту для 16/32-бит? Нет, |
| | проще использовать UEFI Shell или Linux Live. |
| | Для DOS можно использовать альтернативы: SCSITOOL или |
| | WDIDLE (но они ограничены). |
+------------------------+-----------------------------------------------------------+
| UEFI Shell | Скачать версию для UEFI: |
| | https://sg.danny.cz/sg/p/sg3_utils-1.48_uefi.zip |
| | Распаковать на FAT32 USB, загрузиться в UEFI Shell, |
| | затем перейти в каталог и выполнить: |
| | fs0: |
| | cd efi |
| | sg_format.efi --help |
+------------------------+-----------------------------------------------------------+
3. Определение устройства и текущего размера блока
Перед форматированием убедитесь, что вы знаете правильное имя устройства. В Linux это /dev/sgX (общий SCSI-узел) или /dev/sdX (блочное устройство). sg_format предпочитает /dev/sgX (например, /dev/sg0). Для просмотра всех SCSI-устройств используйте lsscsi или sg_scan -i.
# Просмотр всех SCSI-устройств
sg_scan -i
# Просмотр текущих параметров диска (размер блока, количество блоков)
sg_format /dev/sg0
# Пример вывода:
# Read Capacity (10) failed: ... попробуйте с --readcap16
# Read Capacity (16) reports:
# Number of logical blocks: 7814037168
# Logical block length: 512 bytes
# Current format status: Formatted
Если вы видите ошибки Read Capacity (10) failed, добавьте опцию --readcap16.
4. Полный список команд sg_format
Ниже представлены все основные опции утилиты sg_format. Синтаксис одинаков для Linux, Windows и UEFI Shell (исполняемые файлы называются sg_format, sg_format.exe или sg_format.efi).
sg_format [опции] устройство
Основные опции:
-h, --help Показать справку.
-v, --verbose Увеличить уровень детализации (можно использовать несколько раз).
-V, --version Показать версию утилиты.
--readcap16 Использовать команду READ CAPACITY (16) вместо (10).
-6, --16 Использовать 16-байтовые дескрипторы команд (для больших дисков).
-f, --format Выполнить низкоуровневое форматирование (команда FORMAT UNIT).
-m, --medium Форматирование ленточного накопителя (команда FORMAT MEDIUM).
--preset Использовать команду FORMAT WITH PRESET (для твердотельных накопителей).
-F, --ffmt Формат флага защиты данных (defect list format).
-l, --longlist Использовать полный список дефектов.
-c, --cmplist Включить список дефектов из производителя в дополнение к основному.
--defect-list Включить дефекты (по умолчанию включен список производителя).
--no-defect-list Не включать никакие списки дефектов (простое форматирование).
-p, --profile Указать профиль форматирования для команды PRESET.
-S, --security Форматирование с включением SCSI Security (шифрование).
--size=<bytes> Изменить размер блока (logical block length) в байтах (только если диск поддерживает).
--count=<N> Изменить количество блоков (resize) в штуках. Используется с --size.
--timeout=<sec> Таймаут команды FORMAT UNIT в секундах (по умолчанию 7200).
--quick Выполнить быстрое форматирование (без перезаписи служебных областей, но с обнулением метаданных).
--rescue Пытаться отформатировать даже если устройство не отвечает на команды.
--progress Периодически выводить статус (неполная поддержка).
--dry-run Показать, что будет сделано, но не выполнять (имитация).
5. Подробные примеры использования
5.1. Низкоуровневое форматирование диска (стандартное)
# Для Linux:
sudo sg_format -f /dev/sg0
# Принудительно использовать 16-байтовые команды (для дисков >2 ТБ):
sudo sg_format -f -6 /dev/sg0
# Для Windows (из командной строки администратора):
sg_format.exe -f \\.\PhysicalDrive3
# (номер диска уточнить через 'sg_scan' или 'wmic diskdrive list brief')
Важно: Процесс форматирования может занять от нескольких минут (небольшие SSD) до многих часов (HDD 10+ ТБ). Будьте терпеливы и не прерывайте питание.
5.2. Изменение размера блока с 512 на 4096 байт (Advanced Format)
Некоторые диски поддерживают изменение логического размера сектора. Это полезно для совместимости или оптимизации производительности. Операция возможна только на абсолютно чистых дисках (без разделов, не смонтированных).
# Посмотреть текущий размер блока и поддерживаемые размеры:
sudo sg_format -v /dev/sg0
# Изменить на 4096 байт:
sudo sg_format --size=4096 /dev/sg0
# Одновременно изменить размер блока и количество блоков (уменьшить ёмкость до 1000000 блоков):
sudo sg_format --size=4096 --count=1000000 /dev/sg0
Format command with parameters not supported. Перед изменением обязательно создайте резервную копию данных.
5.3. Форматирование с игнорированием списков дефектов (быстрое)
Для SSD или когда вы уверены в поверхности диска, можно пропустить перезапись служебных областей:
sudo sg_format -f --no-defect-list --quick /dev/sg0
5.4. Форматирование ленточного накопителя (команда FORMAT MEDIUM)
# Форматирование LTO-5 ленты (устройство /dev/sg1)
sudo sg_format -m /dev/sg1
# Для Windows:
sg_format.exe -m \\.\Tape0
5.5. Использование FORMAT WITH PRESET для современных SSD
# Для твердотельных накопителей, поддерживающих команду PRESET
sudo sg_format --preset --profile=1 /dev/sg0
5.6. Просмотр прогресса форматирования (ограниченно)
# Запустить форматирование с периодическим выводом статуса
sudo sg_format -f --progress /dev/sg0
К сожалению, не все устройства поддерживают возврат прогресса. Чаще всего индикатор остаётся на 0% до завершения. В этом случае следите за активностью диска (например, через iostat -x 1 в другом окне).
5.7. Форматирование через UEFI Shell (без ОС)
# Загрузиться в UEFI Shell, найти USB-носитель с sg_format.efi
Shell> fs0:
fs0:\> cd efi
fs0:\efi> sg_format.efi -f -6 0
# Здесь 0 — это номер SCSI-устройства (аналогично /dev/sg0)
6. Работа с sg_format в Windows (особенности)
В Windows утилита может работать только с дисками, которые предоставляют SCSI-порт через специальный драйвер. Для физических дисков используйте синтаксис \\.\PhysicalDriveN. Чтобы узнать номер диска, выполните:
# В командной строке (администратор)
wmic diskdrive list brief
# Или
sg_scan.exe -i
Пример форматирования физического диска 3:
sg_format.exe -f -6 \\.\PhysicalDrive3
7. Возможные ошибки и их решение
+-------------------------------------+--------------------------------------------------+
| Ошибка | Решение |
+-------------------------------------+--------------------------------------------------+
| Read Capacity (10) failed | Используйте опцию --readcap16 |
| Permission denied | Запустите с правами root (Linux) или администра- |
| | тора (Windows) |
| Format command not supported | Устройство не поддерживает низкоуровневое |
| | форматирование (например, некоторые SSD). |
| | Попробуйте --quick или другой метод (например, |
| | blkdiscard для SSD). |
+-------------------------------------+--------------------------------------------------+
| Logical block length change not | Диск не поддерживает изменение размера блока. |
| supported | Оставьте стандартный 512 байт. |
+-------------------------------------+--------------------------------------------------+
| Unit is ready while formatting | Форматирование уже выполняется. Проверьте статус |
| | устройство может быть занято. |
+-------------------------------------+--------------------------------------------------+
| Device or resource busy | Устройство смонтировано или используется. |
| | Размонтируйте: umount /dev/sg0 (Linux) или |
| | отключите том (Windows Diskpart). |
+-------------------------------------+--------------------------------------------------+
8. Альтернативные утилиты для DOS / старых систем
Если вам необходимо форматировать SCSI-диск из чистой DOS (без UEFI), штатной версии sg_format нет. Вместо этого можно использовать:
- SCSITOOL — утилита от Adaptec для низкоуровневого форматирования.
- HDD LLF Tool (Low Level Format) — коммерческая утилита с загрузочной версией DOS.
- Прошивка RAID-контроллера (Ctrl+H / Ctrl+A) — в большинстве BIOS RAID есть опция «Format» для физических дисков.
Рекомендуемый способ: создать загрузочную флешку с Ubuntu Live (или любой Linux Live) и использовать sg_format оттуда. Это работает всегда и безопасно.
9. Чек-лист действий перед низкоуровневым форматированием
- Создайте полную резервную копию данных на другом носителе.
- Убедитесь, что выбран правильный диск (
sg_scan -i,lsscsi). - Размонтируйте диск (если он был смонтирован):
sudo umount /dev/sdX*. - Отключите автоматическое монтирование (например, в Linux закомментируйте запись в /etc/fstab).
- При использовании RAID-контроллера: убедитесь, что диск выведен из массива (если он входит в массив) или работает в режиме JBOD.
- Запишите текущие параметры диска: размер блока, количество блоков (на случай, если понадобится восстановить).
- Для дисков с поддержкой изменения размера блока: проверьте, что новая файловая система будет работать с блоками 4K (совместимость ОС).
sudo sg_vpd -p bl /dev/sg0 — показать поддерживаемые размеры блока.sudo sg_readcap /dev/sg0 — показать новую ёмкость и размер блока.sudo fdisk -l /dev/sdX — убедиться, что диск виден в системе как чистый.
10. Заключение
sg_format — это незаменимый инструмент для системных администраторов и инженеров, работающих с SCSI- и SAS-дисками, SSD и ленточными библиотеками. Он позволяет выполнять низкоуровневое форматирование, изменять размер блока и количество блоков, а также подготавливать накопители для нестандартных задач. Используйте это руководство как справочник, но всегда помните о необратимости операций. При малейших сомнениях — тестируйте на неважном диске.

