Журнал LinuxFormat - перейти на главную

LXF122:NTFS

Материал из Linuxformat
Версия от 13:28, 31 августа 2010; Crazy Rebel (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Hardcore Linux Проверьте себя на крутом проекте для продвинутых пользователей

Содержание

Ntfsprogs: Чиним NTFS-разделы

NTFS – родная файловая система Windows, но это не значит, что в Linux нельзя исправить возникающие в ней ошибки. Маянк Шарма все объяснит...

Для домашних пользователей, которым не обойтись без Photoshop или Quicken и которых не устраивает эмуляция через Wine, двойная загрузка совместно с Windows является злом неизбежным. А это означает наличие одного или нескольких NTFS-разделов. Работать с Linux-разделами легко, но манипулирование NTFS – скажем, когда на диске есть ошибки – требует вызова специальных мощных инструментов, работающих только под Linux. Итак, протрите защитные очки, наденьте брезентовые рукавицы и запустите терминал.

Давайте не будем отвлекаться на внутреннее устройство New Technology File System (NTFS) или на то, как Microsoft постоянно изменяет его с каждым новым выпуском Windows, ставя Linux перед необходимостью вечно создавать стабильный NTFS-драйвер. Сейчас практически любой дистрибутив Linux использует для чтения и записи на NTFS-разделы драйвер пользовательского пространства NTFS-3g.

NTFS-3g доступен по умолчанию, хотя возможности его ограничены: главное он выполняет – например, монтирует NTFS-разделы – но это почти и все. Чтобы извлечь больше, понадобятся «вечнозеленые» ntfsprogs – набор утилит для создания, изменения размера и клонирования NTFS-разделов, а также восстановления удаленных файлов и прочих трюков.

Хотя они довольно давно не обновлялись, это достаточно стабильные и популярные инструменты. Ряд утилит из этого пакета фактически и выполняет всю работу за кулисами большинства графических NTFS-менеджеров в Linux. Как всегда, простейший способ добыть их – это установить ntfsprogs из репозитория вашего дистрибутива.

Восстановление удаленных файлов

Нет, вы не неуклюжи. Это случается даже с лучшими из нас. Увы, восстановить файл гораздо сложнее, чем ненароком удалить его. Шанс исправить наши ошибки дает утилита ntfsundelete из пакета ntfsprogs.

Во-первых, скопируем группу файлов, используя утилиту ntfscp: она позволяет делать это без подмонтирования NTFS-раздела (вы также можете использовать NTFS-3g и команду cp).

$ sudo ntfscp /dev/sdc1 Documents/sample-doc.odt Expendable/sample-doc.odt
$ sudo ntfscp /dev/sdc1 Documents/pic-010.jpg Expendable/pic-010.jpg
$ sudo ntfscp /dev/sdc1 /usr/share/Examples/Aesop.spx Expendable/Aesop.spx

Затем смонтируйте NTFS-раздел и удалите файл в папке Expendable через графический файл-менеджер или с помощью rm. Теперь отмонтируйте раздел и взгляните на результат выполнения этой команды:

# ntfsundelete --scan /dev/sdc1
Inode Flags %age Date Size Filename
16 F... 0% 2009-05-31 0 <none>
17 F... 0% 2009-05-31 0 <none>
18 F... 0% 2009-05-31 0 <none>
30 FN.. 100% 2008-04-10 184905 <none>
37 FN.. 100% 2009-06-15 166182 <none>
Files with potentially recoverable content: 2

Нам интересна последняя строка, отображающая число потенциально восстанавливаемых файлов. Из вывода отметьте номер индексного дескриптора (inode) файла с подходящим размером. Теперь восстановите его с помощью:

# ntfsundelete --undelete --inode 30 --output Recovered/recovered.pdf recovered.pdf /dev/sdc1
Inode Flags %age Date Size Filename
30 FN.. 0% 2008-04-10 184905 <none>
Undeleted ‘(null)’ successfully.

Эта команда создаст файл recovered.pdf в директории Recovered. (Это, конечно, очевидно, но здесь использовано расширение файла PDF потому что я стер PDF-файл.)

Несмотря на то, что утилита восстановит файл, есть шанс, что часть данных потеряна. В моем случае PDF-файл был поврежден, но Evince смог его вылечить. Другой файл, аудиоформата SPX, был восстановлен, но не проигрывался, поскольку был поврежден безвозвратно. Таким образом, даже если все сработает, нет гарантии, что вы сможете использовать восстановленные файлы.

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


Шаг за шагом: Изменяем размер NTFS-раздела

Шаг 1

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

Шаг 2

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

Шаг 3

3 Изменяем размер
Gparted позволяет вам создавать очередь задач для запуска их одну за другой. При изменении размера раздела, GParted использует утилиту ntfsresize пакета ntfsprogs. Перед реальным сжатием или расширением раздела сперва запускается симуляция.

Клонируем разделы

Одной из лучших утилит пакета ntfsprogs является ntfsclone, из имени которой видно, что ее можно использовать для клонирования NTFS-разделов.

Есть несколько ситуаций, когда вам может понадобиться клонировать NTFS-раздел. Например, у вас закончилось место на текущем разделе и вы хотите переместить все данные NTFS на больший раздел. Можно скопировать их все, но это слишком долго и рискованно, и сработает только при наличии достаточного места на диске. Или, допустим, если у вас есть несколько машин с одинаковыми дисками, вы можете захотеть клонировать установленную Windows с одной из них на все другие, чтобы создать небольшую сеть. При клонировании NTFS-раздела потребуется раздел большего размера для сохранения клонированного образа.

Инструмент ntfsclone работает как dd, но так как он понимает структуру NTFS, то дублирует не весь раздел, а сохраняет только занятые блоки.

Давайте клонируем NTFS-раздел на Linux-раздел, расположенный на другом диске той же машины.

$ sudo ntfsclone --save-image /dev/sdc1 -output ntfs-hdccompressed.img
ntfsclone v2.0.0 (libntfs 10:0:0)
NTFS volume version: 3.1
Cluster size : 4096 bytes
Current volume size: 2146762752 bytes (2147 MB)
Current device size: 2146765824 bytes (2147 MB)
Scanning volume ...
100.00 percent completed
Accounting clusters ...
Space in use : 13 MB (0.6%)
Saving NTFS to image ...
100.00 percent completed
Syncing ...

Требуемое на это время зависит от объема NTFS-раздела, скорости вашего диска и мощности процессора, доступной для сжатия образа. Если вы хотите сохранить образ как резервную копию, в следующий раз воспользуйтесь ключом --overwrite (или -O) для замены существующего образа – например, так:

sudo ntfsclone --save-image /dev/hdc1 --overwrite ntfs-hdccompressed.img

ntfsclone предоставляет и другие режимы клонирования, которые не сжимают образы, но позволяют монтировать их, используя loopback-устройство.

$ sudo ntfsclone /dev/hdc1 --overwrite ntfs-hdc.img

Эта команда похожа на приведенную выше, только не содержит опции --save-image. А вывод

ls -lh ntfs-hdc.img

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

$ sudo mkdir /mnt/ntfsclone
$ sudo mount -o rw,loop -t ntfs ntfs-hdc.img /mnt/ntfsclone

Теперь вы можете спокойно копировать, перемещать, редактировать или удалять файлы. После окончания работы отмонтируйте образ посредством umount /mnt/ntfsclone.


Восстанавливаем клоны

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

$ sudo ntfsclone ntfs-hdc.img --overwrite /dev/sdc1

Легко! Теперь смонтируйте раздел и убедитесь, что назад вернулись не только все ваши файлы, но также и все те, что вы изменили, когда монтировали образ.

Похожим способом вы можете восстановить сжатый образ на другой раздел и даже на другой диск. Это может быть полезно, когда вы перемещаете содержимое NTFS-раздела на больший раздел. Вы можете легко восстановить образ NTFS на раздел большего размера.

$ sudo ntfsclone --restore-image --overwrite /dev/sda1 ntfs-hdc-compressed.img

Процесс клонирования и восстановления образа нормально работает на незагрузочных NTFS-разделах. Для перемещения загрузочного раздела необходимо действовать чуть иначе. Сперва представим, что вам необходимо настроить маленький класс на 10 компьютеров, имеющих идентичные жесткие диски Seagate по 250 ГБ. Вы создаете четыре раздела на одном диске, устанавливаете Windows на основной раздел, затем форматируете другие три логических раздела как NTFS для сохранения файлов. Теперь вам необходимо повторить эту схему для оставшихся девяти машин.

Начнем с сохранения таблицы разделов и основной загрузочной записи (MBR):

# sfdisk -d /dev/sda > /media/disc0/master-sfdisk-sda.dump
# dd if=/dev/sda bs=512 count=1 of=/media/disc0/master-sda.mbr

Теперь пришло время для перемещения разделов. При этом необходимо всегда использовать опцию --save-image, чтобы сделать образ как можно меньше. Это позволит легко разместить его на внешнем диске или быстро передать через беспроводную сеть.

На остальных машинах перед восстановлением разделов нужно восстановить таблицу разделов и MBR:

# sfdisk /dev/sda < /media/disc0/master-sfdisk-sda.dump
# dd if=/media/disc0/master-sda.mbr of=/dev/sda

Ваш спасательный набор

В этой статье я рекомендовал вам устанавливать ntfsprogs из репозитория вашего дистрибутива. Это полезно для ознакомления с инструментами в комфортной среде виртуальной машины; но в реальной ситуации, когда у вас есть нужда клонировать все разделы с одного NTFS-диска на другой, вы можете счесть LiveCD гораздо более практичным.

В старые добрые времена Knoppix был единственным надежным швейцарским армейским ножом для всех действий. Но теперь имеется множество проектов, создающих специализированные LiveCD для восстановления и манипулирования всеми типами разделов и дисков. Они тоже напичканы дополнительными возможностями и утилитами. Например, System Rescue CD несет в себе инструмент ntfstruncate, которые не поставляется в стандартном двоичном пакете.

Затем есть Ultimate Boot Disc, содержащий различные диагностические инструменты для жестких дисков. Также убедитесь, что ваш арсенал содержит Trinity Rescue Kit, который включает скрипты на основе утилит ntfsprogs, в том числе mclone для облегченного клонирования разделов.

Перемещаем загрузочные разделы

Далее идет более общий, но и чуть более сложный сценарий. Допустим, надо перенести загрузочный раздел Windows на другой (скажем, sda1 на sdb1) на одном и том же диске, либо на другой диск. Создание клона в данном случае выполняется аналогично, но копирование таблицы разделов и MBR не поможет, потому что они будут продолжать указывать на старое место (sda1), тогда как клонированный образ будет восстановлен в другом (sdb1).

Есть несколько способов обойти эту проблему. Самый простой заключается в использовании менеджера загрузки Gag. Можноскачать Gag с его web-сайта, но проще использовать Live-дистрибутив – например, SystemRescueCD.

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

Теперь следуйте инструкциям по установке Gag, сперва указав диск, который будет домом для только что восстановленной из клона установки Windows. Gag автоматически найдет и подхватит список всех установленных на этом диске ОС. В конце выберите опцию сохранения Gag на жесткий диск, которая поместит его в MBR.

Каждая Windows-машина имеет уникальный идентификатор безопасности (SID). Если ваша клонированная машина сбоит, скачайте и используйте свободную утилиту NewSID от Microsoft для генерации нового SID.

Сбрасываем поврежденные секторы

Один из моих старых дисков начал покрываться плохими секторами, но гарантия на него закончилась, и я его почти не использую. Я клонировал с него NTFS-разделы, восстановил их на другой диск, и был ошарашен, когда chkdsk сказал, что и новый диск имеет поврежденные секторы. Неужели это заразно?

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

Чтобы сбросить этот список, воспользуйтесь утилитой ntfstruncate. Она доступна, если вы собрали ntfsprogs из исходников, или можно взять ее с SystemRescueCD.

Сперва используйте утилиту ntfsinfo для вывода информации о новом диске.

$ sudo ntfsinfo -i 8 /dev/sdc1
Dumping Inode 8 (0x8)
Upd. Seq. Array Off.: 48 (0x30)
Upd. Seq. Array Count: 3 (0x3) 
Upd. Seq. Number: 2 (0x2)
LogFile Seq. Number: 0x0
MFT Record Seq. Numb.: 8 (0x8)
Number of Hard Links: 1 (0x1)
Attribute Offset: 56 (0x38)
MFT Record Flags: IN_USE
Bytes Used: 376 (0x178) bytes 
Bytes Allocated: 1024 (0x400) bytes
Next Attribute Instance: 4 (0x4)
MFT Padding: 00 00
Dumping attribute $DATA (0x80) from mft record 8 (0x8)
Resident: No
Attribute name: ‘$Bad’
Attribute flags: 0x0000
Attribute instance: 1 (0x1)
Compression unit: 0 (0x0)
Data size: 2146762752 (0x7ff50000)
Allocated size: 2146762752 (0x7ff50000)
Initialized size: 0 (0x0)
End of inode reached

Это лишь усеченная часть вывода, производимого ntfsinfo: львиная его доля будет понятна только людям, глубоко разбирающимся в устройстве NTFS. Для дальнейшего использования нас интересует только переменная Allocated size в разделе Dumping attribute $DATA (0x80), поэтому запишите ее значение.

Теперь надо установить значение атрибута $Bad в 0:

$ sudo ntfstruncate /dev/sdc1 8 0x80 ‘$Bad’ 0
ntfstruncate v2.0.0 (libntfs 10:0:0)
ntfstruncate complete successfully. Have a nice day.

Затем установим атрибут $Bad назад в его исходное значение:

$ sudo ntfstruncate /dev/sdc1 8 0x80 ‘$Bad’ 2146762752
ntfstruncate v2.0.0 (libntfs 10:0:0)
ntfstruncate complete successfully. Have a nice day.

Ну вот, теперь все закончено. Перезагрузитесь в Windows и запустите chkdsk, и все будет в порядке. Если вам приходится пасти стадо Windows-машин, мужайтесь – вам теперь поможет лучший инструмент Linux, если чему-то настанет капут.

Дружим со скриптами

Важные утилиты ntfsprogs, вроде ntfsclone, можно попросить отправить данные в стандартный вывод.

Большинство инструментов Linux умеют читать данные из стандартного ввода, поэтому вы можете передать вывод ntfsclone в другие инструменты Linux.

Если вам кажется, что --save-image недостаточно эффективно сжимает раздел, напустите на него gzip, как показано здесь:

ntfsclone --save-image --output - /dev/sdb1 | gzip -c >ntfs-sdb1.img.gz

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

{
dd if=”$disk” bs=512 count=63
ntfsclone --save-image --output -“$partition”
} | gzip -9 >”$file”

Они делают копию MBR и загрузочного кода, комбинируют с образом выбранного вами раздела, затем прогоняют вывод через gzip и записывают в указанное вами место.

Шаг за шагом: Клонируем NTFS-разделы через сеть

Шаг 1

1 Загрузите компьютер-отправитель как обычно
Для этого понадобится как минимум две копии Live CD Trinity Rescue Kit. Загрузите одну из них на машине, которая будет посылать разделы через локальную сеть. Когда она будет запущена, выполните скрипт mclone с ключом -s.

Шаг 2

2 Загрузите получателей как SSH
Теперь перейдите к другой машине и загрузите Trinity Rescue Kit с опцией SSH Server Enabled. Она будет настроена как и машина-источник, но позволит вам задать пароль root. Если вы хотите клонировать на несколько машин, загрузите их тоже.

Шаг 3

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

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

Персональные инструменты
купить
подписаться
Яндекс.Метрика