Dos fn 24h установить адрес произвольной записи в файле


Содержание

Работа с файлами

Для удобства обращения информация в запоминающих устройствах хранится в виде файлов.

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

Каталог ( папка , директория ) – именованная совокупность байтов на носителе информации, содержащая название подкаталогов и файлов, используется в файловой системе для упрощения организации файлов.

Файловой системой называется функциональная часть операционной системы, обеспечивающая выполнение операций над файлами. Примерами файловых систем являются FAT (FAT – File Allocation Table, таблица размещения файлов), NTFS, UDF (используется на компакт-дисках).

Существуют три основные версии FAT: FAT12, FAT16 и FAT32. Они отличаются разрядностью записей в дисковой структуре, т.е. количеством бит, отведённых для хранения номера кластера. FAT12 применяется в основном для дискет (до 4 кбайт), FAT16 – для дисков малого объёма, FAT32 – для FLASH-накопителей большой емкости (до 32 Гбайт).

Рассмотрим структуру файловой системы на примере FAT32.

Файловая структура FAT32

Устройства внешней памяти в системе FAT32 имеют не байтовую, а блочную адресацию. Запись информации в устройство внешней памяти осуществляется блоками или секторами.

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

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

Файловая система FAT32 имеет следующую структуру.

Нумерация кластеров, используемых для записи файлов, ведется с 2. Как правило, кластер №2 используется корневым каталогом, а начиная с кластера №3 хранится массив данных. Сектора, используемые для хранения информации, представленной выше корневого каталога, в кластеры не объединяются.
Минимальный размер файла, занимаемый на диске, соответствует 1 кластеру.

Загрузочный сектор начинается следующей информацией:

  • EB 58 90 – безусловный переход и сигнатура;
  • 4D 53 44 4F 53 35 2E 30 MSDOS5.0;
  • 00 02 – количество байт в секторе (обычно 512);
  • 1 байт – количество секторов в кластере;
  • 2 байта – количество резервных секторов.

Кроме того, загрузочный сектор содержит следующую важную информацию:

  • 0x10 (1 байт) – количество таблиц FAT (обычно 2);
  • 0x20 (4 байта) – количество секторов на диске;
  • 0x2С (4 байта) – номер кластера корневого каталога;
  • 0x47 (11 байт) – метка тома;
  • 0x1FE (2 байта) – сигнатура загрузочного сектора ( 55 AA ).

Сектор информации файловой системы содержит:

  • 0x00 (4 байта) – сигнатура ( 52 52 61 41 );
  • 0x1E4 (4 байта) – сигнатура ( 72 72 41 61 );
  • 0x1E8 (4 байта) – количество свободных кластеров, -1 если не известно;
  • 0x1EС (4 байта) – номер последнего записанного кластера;
  • 0x1FE (2 байта) – сигнатура ( 55 AA ).

Таблица FAT содержит информацию о состоянии каждого кластера на диске. Младшие 2 байт таблицы FAT хранят F8 FF FF 0F FF FF FF FF (что соответствует состоянию кластеров 0 и 1, физически отсутствующих). Далее состояние каждого кластера содержит номер кластера, в котором продолжается текущий файл или следующую информацию:

  • 00 00 00 00 – кластер свободен;
  • FF FF FF 0F – конец текущего файла.

Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:

  • 8 байт – имя файла;
  • 3 байта – расширение файла;

Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:

  • 8 байт – имя файла;
  • 3 байта – расширение файла;
  • 1 байт – атрибут файла:
  • 1 байт – зарезервирован;
  • 1 байт – время создания (миллисекунды) (число от 0 до 199);
  • 2 байта – время создания (с точностью до 2с):
  • 2 байта – дата создания:
  • 2 байта – дата последнего доступа;
  • 2 байта – старшие 2 байта начального кластера;
  • 2 байта – время последней модификации;
  • 2 байта – дата последней модификации;
  • 2 байта – младшие 2 байта начального кластера;
  • 4 байта – размер файла (в байтах).

В случае работы с длинными именами файлов (включая русские имена) кодировка имени файла производится в системе кодировки UTF-16. При этого для кодирования каждого символа отводится 2 байта. При этом имя файла записывается в виде следующей структуры:

  • 1 байт последовательности;
  • 10 байт содержат младшие 5 символов имени файла;
  • 1 байт атрибут;
  • 1 байт резервный;
  • 1 байт – контрольная сумма имени DOS;
  • 12 байт содержат младшие 3 символа имени файла;
  • 2 байта – номер первого кластера;
  • остальные символы длинного имени.

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

Работа с файлами в языке Си

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

Когда поток открывается для ввода-вывода, он связывается со стандартной структурой типа FILE , которая определена в stdio.h . Структура FILE содержит необходимую информацию о файле.

Открытие файла осуществляется с помощью функции fopen() , которая возвращает указатель на структуру типа FILE , который можно использовать для последующих операций с файлом.

  • «r» — открыть файл для чтения (файл должен существовать);
  • «w» — открыть пустой файл для записи; если файл существует, то его содержимое теряется;
  • «a» — открыть файл для записи в конец (для добавления); файл создается, если он не существует;
  • «r+» — открыть файл для чтения и записи (файл должен существовать);
  • «w+» — открыть пустой файл для чтения и записи; если файл существует, то его содержимое теряется;
  • «a+» — открыть файл для чтения и дополнения, если файл не существует, то он создаётся.

Возвращаемое значение — указатель на открытый поток. Если обнаружена ошибка, то возвращается значение NULL .

Функция fclose() закрывает поток или потоки, связанные с открытыми при помощи функции fopen() файлами. Закрываемый поток определяется аргументом функции fclose() .

Возвращаемое значение: значение 0, если поток успешно закрыт; константа EOF , если произошла ошибка.

Чтение символа из файла:


Аргументом функции является указатель на поток типа FILE . Функция возвращает код считанного символа. Если достигнут конец файла или возникла ошибка, возвращается константа EOF .

Запись символа в файл:

Аргументами функции являются символ и указатель на поток типа FILE . Функция возвращает код считанного символа.

Функции fscanf() и fprintf() аналогичны функциям scanf() и printf() , но работают с файлами данных, и имеют первый аргумент — указатель на файл.

Функции fgets() и fputs() предназначены для ввода-вывода строк, они являются аналогами функций gets() и puts() для работы с файлами.


Символы читаются из потока до тех пор, пока не будет прочитан символ новой строки ‘\n’ , который включается в строку, или пока не наступит конец потока EOF или не будет прочитано максимальное символов. Результат помещается в указатель на строку и заканчивается нуль- символом ‘\0’ . Функция возвращает адрес строки.

Asmworld Программирование на ассемблере для начинающих и не только

Работа с файлами в DOS

Автор: xrnd | Рубрика: Исходники | 25-12-2010 | Распечатать запись

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

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

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

Прежде, чем что-то записывать, необходимо создать файл. Для этого используется функция DOS 3Ch.

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

Об ошибке можно узнать, проверяя значение флага CF (1 — ошибка, 0 — нет ошибки). Аналогично для других функций работы с файлами. Если флаг CF равен 0, то в регистре AX будет находиться дескриптор (или описатель) файла. Дескриптор — это просто специальное число, по которому операционная система отличает один открытый файл от другого.

Запись данных в файл

Запись в файл выполняется функцией DOS 40h. Этой функции нужно передать в регистре BX тот самый дескриптор, который был получен при создании файла.

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

Закрытие файла

После работы с файлом нужно его закрыть с помощью функции DOS 3Eh.

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

Пример первый

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

use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h jmp start ;Перепрыгнуть данные ;——————————————————————————- ; Данные file_name db ‘hello.txt’,0 buffer db ‘asmworld.ru’,13,10,’Hello!’ size db 19 s_error db ‘Error!’,13,10,’$’ s_pak db ‘Press any key. $’ handle rw 1 ;Дескриптор файла ;——————————————————————————- ; Код start: mov ah,3Ch ;Функция DOS 3Ch (создание файла) mov dx,file_name ;Имя файла xor cx,cx ;Нет атрибутов — обычный файл int 21h ;Обращение к функции DOS jnc @F ;Если нет ошибки, то продолжаем call error_msg ;Иначе вывод сообщения об ошибке jmp exit ;Выход из программы @@: mov [handle],ax ;Сохранение дескриптора файла mov bx,ax ;Дескриптор файла mov ah,40h ;Функция DOS 40h (запись в файл) mov dx,buffer ;Адрес буфера с данными movzx cx,[size] ;Размер данных int 21h ;Обращение к функции DOS jnc close_file ;Если нет ошибки, то закрыть файл call error_msg ;Вывод сообщения об ошибке close_file: mov ah,3Eh ;Функция DOS 3Eh (закрытие файла) mov bx,[handle] ;Дескриптор int 21h ;Обращение к функции DOS jnc exit ;Если нет ошибки, то выход из программы call error_msg ;Вывод сообщения об ошибке exit: mov ah,9 mov dx,s_pak int 21h ;Вывод строки ‘Press any key. ‘ mov ah,8 ;\ int 21h ;/ Ввод символа без эха mov ax,4C00h ;\ int 21h ;/ Завершение программы ;——————————————————————————- ; Процедура вывода сообщения об ошибке error_msg: mov ah,9 mov dx,s_error int 21h ;Вывод сообщения об ошибке ret

В результате работы программы создаётся файл, который можно открыть блокнотом:

Открытие существующего файла

Для открытия файла используется функция DOS 3Dh. В отличие от создания файла, эта функция завершится ошибкой, если файл не существует.

Чтение данных из файла

Чтение из файла выполняется функцией DOS 3Fh.

Размер буфера для данных должен быть больше или равен количеству считываемых байтов. Обратите внимание, что в AX функция возвращает количество реально прочитанных байтов. Это количество может быть меньше требуемого, например, если файл слишком короткий.

Пример второй

Программа читает данные из текстового файла и выводит на консоль. Для того, чтобы вывести данные, нужно добавить символ ‘$’ в конец строки.

use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h jmp start ;Перепрыгнуть данные ;——————————————————————————- ; Данные file_name db ‘hello.txt’,0 s_error db ‘Error!’,13,10,’$’ s_file db ‘—-[ file «Hello.txt» ]$’ endline db 13,10,’$’ s_pak db ‘Press any key. $’ buffer rb 81 ;80 + 1 байт для символа конца строки ‘$’ handle rw 1 ;Дескриптор файла ;——————————————————————————- ; Код start: mov ah,3Dh ;Функция DOS 3Dh (открытие файла) xor al,al ;Режим открытия — только чтение mov dx,file_name ;Имя файла xor cx,cx ;Нет атрибутов — обычный файл int 21h ;Обращение к функции DOS jnc @F ;Если нет ошибки, то продолжаем call error_msg ;Иначе вывод сообщения об ошибке jmp exit ;Выход из программы @@: mov [handle],ax ;Сохранение дескриптора файла mov bx,ax ;Дескриптор файла mov ah,3Fh ;Функция DOS 3Fh (чтение из файла) mov dx,buffer ;Адрес буфера для данных mov cx,80 ;Максимальное кол-во читаемых байтов int 21h ;Обращение к функции DOS jnc @F ;Если нет ошибки, то продолжаем call error_msg ;Вывод сообщения об ошибке jmp close_file ;Закрыть файл и выйти из программы @@: mov bx,buffer add bx,ax ;В AX количество прочитанных байтов mov byte[bx],’$’ ;Добавление символа ‘$’ mov ah,9 mov dx,s_file int 21h ;Вывод строки с именем файла mov cx,56 call line ;Вывод линии mov ah,9 mov dx,buffer int 21h ;Вывод содержимого файла mov dx,endline int 21h ;Вывод перехода на новую строку mov cx,80 call line ;Вывод линии close_file: mov ah,3Eh ;Функция DOS 3Eh (закрытие файла) mov bx,[handle] ;Дескриптор int 21h ;Обращение к функции DOS jnc exit ;Если нет ошибки, то выход из программы call error_msg ;Вывод сообщения об ошибке exit: mov ah,9 mov dx,s_pak int 21h ;Вывод строки ‘Press any key. ‘ mov ah,8 ;\ int 21h ;/ Ввод символа без эха mov ax,4C00h ;\ int 21h ;/ Завершение программы ;——————————————————————————- ; Процедура вывода сообщения об ошибке error_msg: mov ah,9 mov dx,s_error int 21h ;Вывод сообщения об ошибке ret ;——————————————————————————- ; Вывод линии ; CX — количество символов line: mov ah,2 ;Функция DOS 02h (вывод символа) mov dl,’-‘ ;Символ @@: int 21h ;Обращение к функции DOS loop @B ;Команда цикла ret

Результат работы программы:

Некоторые другие функции DOS для работы с файлами

Подробное описание смотрите в справочнике.

  • 5Bh — создание нового файла без удаления существующего;
  • 5Ah — создание файла с уникальным именем (например, временного файла);
  • 41h — удаление файла;
  • 42h — установка указателя чтения/записи;
  • 56h — переименование файла;
  • 43h — получение или изменение атрибутов файла;
  • 57h — получение или изменение метки времени файла;
  • 39h — создание папки;
  • 3Ah — удаление папки;
  • 3Bh — изменение текущей папки;
  • 47h — получение текущей папки.

Функция 0ah: Ввод строки с клавиатуры в буфер

DS:DX = адрес входного буфера (смотри ниже)

Выход Буфер содержит ввод, заканчивающийся символом CR (ASCII 0dh)

Описание: При обращении буфер по адресу DS:DX должен содержать значение максимально допустимой длины ввода. На выходе функции в следующем байте содержится действительная длина ввода, затем введенный текст, завершающийся символом возврата каретки (0dh). Символы считываются с устройства стандартного ввода вплоть до CR (ASCII 0dh) или до достижения длины MAX-1. Если достигнут MAX-1, включается консольный звонок для каждого очередного символа, пока не будет введен возврат каретки CR (нажатие Enter). Второй байт буфера заполняется действительной длиной введенной строки, не считая завершающего CR. Последний символ в буфере — всегда CR (не засчитан в байте длины). Символы в буфере (включая LEN) в момент вызова используются как «шаблон». В процессе ввода действительны обычные клавиши редактирования: Esc выдает «\» и начинает с начала, F3 выдает буфер до конца шаблона, F5 выдает «@» и сохраняет текущую строку как шаблон, и т. д. Большинство расширенных кодов ASCII игнорируются. При распознавании Ctrl-Break выполняется прерывание int 23h (буфер остается неизменным).

Завершение программы

Функция 4ch: Завершить программу (EXIT)

Вход AH = 4ch

AL = код возврата

Описание: Возвращает управление от порожденного процесса его родителю, устанавливая код возврата, который можно опросить функцией 4dh WAIT. Управление передается по адресу завершения в PSP завершаемой программы. В векторах Ctrl-Break и Critical Error восстанавливаются старые значения, сохраненные в родительском PSP.

Замечание: Значение ERRORLEVEL (используемое в пакетных файлах DOS) можно использовать для проверки кода возврата самой последней программы.

Функция 4dh: Дать код возврата программы (WAIT)

Вход AH = 4dh

Выход AL = код возврата последнего завершившегося процесса

AH = 0 — нормальное завершение

АН = 1 — завершение через Ctrl-Break int 23h

АН = 2 — завершение по критической ошибке устройства int 24h

АН = 3 — завершение через функцию 31h KEEP

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

Функция 4dh: Дать код возврата программы (WAIT)

Вход AH = 4dh

Выход AL = код возврата последнего завершившегося процесса

AH = 0 — нормальное завершение

АН = 1 — завершение через Ctrl-Break int 23h

АН = 2 — завершение по критической ошибке устройства int 24h

АН = 3 — завершение через функцию 31h KEEP

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

Работа с файлами

Функция 3ch: Создать файл через дескриптор

Вход AH = 3ch

DS:DX = адрес строки ASCIIZ с именем файла

CX = атрибут файла

Выход AX = код ошибки, если CF установлен

АХ = дескриптор файла, если ошибки нет

Описание: DS:DX указывает на строку ASCIIZ в формате: «d:\путь\имяфайла»,0. Если диск и/или путь опущены, они принимаются по умолчанию. файл создается в указанном (или текущем) каталоге файл открывается в режиме доступа чтение/запись вы должны сохранить дескриптор (handle) для последующих операций, если файл уже существует:

· при открытии файл усекается до нулевой длины

· если атрибут файла — только чтение, открытие отвергается (атрибут можно изменить функцией 43h Изменить Атрибут)

CONFIG.SYS определяет число доступных дескрипторов в системе

Используйте функцию 5bh Создать Новый Файл, если вы не хотите

испортить существующий файл.

Функция 5bh: Создать новый файл

Вход AH = 5bh DOS 3.0+

DS:DX = адрес строки ASCIIZ с именем файла

CX = атрибут файла

Выход AX = код ошибки, если CF установлен

АХ = дескриптор файла, если ошибок нет

Описание: DS:DX указывает на строку ASCIIZ в форме: «d:\путь\имя_файла»,0. Если диск и/или путь опущены, они принимаются по умолчанию. Этот вызов идентичен функции DOS 3ch CREATE, с тем исключением, что он вернет ошибку, если файл с заданным именем уже существует. Файл открывается для чтения/записи в совместимом Режиме Доступа.

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой.

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

Прочитайте онлайн Создаем вирус и антивирус | Приложение Б Функции DOS (INT 21h)

Приложение Б Функции DOS (INT 21h)

DOS, функция 00h

CS – сегмент PSP завершающегося процесса

Описание. Передает управление на вектор завершения в PSP (выходит в родительский процесс). Идентична функции INT 20h (Terminate). Регистр CS должен указывать на PSP. Восстанавливает векторы прерываний DOS 22h-24h (Завершение, Ctrl-Break и Критическая ошибка), устанавливая значения, сохраненные в родительском PSP. Выполняет сброс файловых буферов. Файлы должны быть предварительно закрыты, если их длина изменилась.

Данная функция не рекомендуется к использованию. Для выхода из программы лучше использовать функцию DOS 4Ch.

DOS, функция 01h Считать со стандартного устройства ввода

Выход: AL – символ, полученный из стандартного ввода

Описание. Считывает (ожидает) символ со стандартного входного устройства. Отображает этот символ на стандартное выходное устройство (эхо). При обнаружении Ctrl-Break выполняется INT 23h.

Ввод расширенных клавиш ASCII (F1-F12, PgUp, курсор и другие) требует двух обращений к этой функции. Первый вызов возвращает AL=0. Второй вызов возвращает в AL расширенный код ASCII.

DOS, функция 02h Записать в стандартное устройство вывода

DL – символ, выводимый в стандартный вывод

Посылает символ из DL в стандартное устройство вывода. Обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции. При обнаружении Ctrl-Break выполняется INT 23h.

DOS, функция 03h Считать символа со стандартного вспомогательного устройства

Выход: AL – символ, введенный со стандартного вспомогательного устройства

Описание. Считывает (ожидает) символ со стандартного вспомогательного устройства, COM1 или AUX и возвращает этот символ в AL.

Ввод не буферизуется и должен опрашиваться (не управляется прерываниями). При запуске DOS порт AUX (COM1) инициализируется так: 2400 бод, без проверки на четность, 1 стоп-бит, 8-битные слова. Команда DOS MODE используется для установки иных характеристик.

DOS, функция 04h Записать символ в стандартное вспомогательное устройство

DL – символ, выводимый в стандартное вспомогательное устройство

Посылает символ, находящийся в регистре DL, на стандартное вспомогательное устройство, COM1 или AUX.

DOS, функция 05h Вывести на принтер

DL – символ, записываемый на стандартный принтер

Посылает символ в DL на стандартное устройство печати, обычно LPT1.

DOS, функция 06h Консольный ввод-вывод

DL=00h-FEh – символ, посылаемый на стандартный вывод

DL=FFh – запрос ввода со стандартного ввода

ZF=0, если осуществлялся ввод символа и символ готов при запросе ввода

AL – считанный символ

ZF=1, если осуществлялся ввод символа и символа в консоли нет

При DL=0FFh выполняет ввод с консоли «Без ожидания», возвращая включенный флаг нуля ZF, если на консоли нет готового символа. Если символ готов, сбрасывает флаг ZF и возвращает считанный символ в AL. Если DL не равен 0FFh, то DL направляется на стандартный вывод.

DOS, функция 07h Нефильтрующий консольный ввод без эха

Выход: AL – символ, полученный через стандартный ввод

Описание. Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. Не проверяет на Ctrl-Break, BackSpace и другие.

Для ввода расширенного символа ASCII должна быть вызвана дважды. Для проверки статуса используется функция DOS 0Bh (чтобы не ожидать нажатия клавиши).

DOS, функция 08h Консольный ввод без эха

Выход: AL – символ, полученный через стандартный ввод

Описание. Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. При обнаружении Ctrl-Break выполняется прерывание INT 23h.

Для ввода расширенного символа ASCII должна быть вызвана дважды.

DOS, функция 09h Запись строки на стандартный вывод

DS:DX – адрес строки, заканчивающейся символом «$» (ASCII 24h)

Строка, исключая завершающий ее символ «$», посылается на стандартный вывод. Символы Backspace обрабатываются как в функции 02h (вывод на дисплей). Чтобы перейти на новую строку, обычно включают в текст пару CR/LF (ASCII 0Dh и ASCII 0Ah). Строки, содержащие «$», можно передать на стандартное устройство вывода с помощью функции 40h (BX=0).

DOS, функция 0Ah Ввод строки в буфер


DS:DX – адрес входного буфера (Таблица Б-1)

Таблица Б-1. Формат входного буфера

Буфер содержит введенные данные, в конце – символ CR (ASCII 0Dh)

DOS, функция 0Bh Проверка статуса ввода

Выход: AL=FFh, если символ доступен со стандартного ввода AL=00h, если нет доступного символа

Описание. Проверяет состояние стандартного ввода. При распознавании Ctrl-Break выполняется INT 23h.

Используется перед функциями 01h, 07h и 08h, чтобы избежать ожидания нажатия клавиши.

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

DOS, функция 0Ch Ввод с очисткой

AL – номер функции ввода DOS:

AL=01h – ввод с клавиатуры

AL=06h – ввод с консоли

AL=07h – нефильтрующий без эха

AL=08h – ввод без эха

AL=0Ah – буферизованный ввод

Очищает буфер опережающего ввода стандартного ввода, а затем вызывает функцию ввода, указанную в AL. Это заставляет систему ожидать ввод очередного символа.

DOS, функция 0Dh Сброс диска

Сбрасывает диск (записывает на диск все файловые буферы). Файл, размер которого изменился, должен быть предварительно закрыт (при помощи функций 10h или 3Eh).

DOS, функция 0Eh Установить текущий диск DOS

DL – номер диска (0 – A, 1 – B и так далее), который становится текущим

Выход: AL – общее число дисководов в системе

Описание. Диск, указанный в DL, становится текущим. Проверка: используется функция 19h (дать текущий диск). В регистре AL возвращается число дисководов всех типов, включая жесткие диски и «логические» диски (как диск B: системе с одним гибким диском).

AL имеет то же значение, что и LASTDRIVE, указанное в файле CONFIG.SYS, и по умолчанию равно 5.

DOS, функция 0Fh Открыть файл через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

Таблица Б-2. Формат FCB

AL=00h, если функция выполнена успешно (FCB заполнен)

AL=FFh, если файл не найден или доступ к файлу не разрешен

Файл, описываемый неоткрытым FCB, должен существовать в текущем оглавлении на диске, специфицированном в FCB (0 – текущий, 1 – A, 2 – B и так далее). Если файл не существует, возвращается AL=0FFh. Файл открывается в режиме совместимости. Если поле «Номер диска» в FCB равно нулю в момент вызова, то оно заполняется номером текущего дисковода (1 – A, 2 – B и так далее). Поле FCB «Номер текущего блока» устанавливается в ноль. Поле FCB «Размер логической записи» устанавливается в 80h. Поля даты и размера файла в FCB устанавливаются из оглавления.

DOS, функция 10h Закрыть файл через FCB

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно

AL=FFh, если файл не найден там, где он находился при открытии с помощью функции 0Fh

Закрывает файл, открытый функцией 0Fh. Файл должен находиться на своем первоначальном месте в текущем оглавлении диска, на котором он был открыт. Если файл найден, оглавление обновляется, файловые буфера сбрасываются и возвращается AL=00h. Если файл не найден, оглавление не обновляется и возвращается AL=FFh.

DOS, функция 11h Найти первый совпадающий файл через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если подходящее имя найдено

AL=FFh, если подходящего имени нет

В текущем оглавлении DOS происходит поиск файлов с именем, соответствующим заданному шаблону. При неудаче возвращается AL=0FFh. Если имя найдено, AL очищается, в первый байт DTA помещается номер дисковода (A – 1, B – 2 и так далее), а в следующие 32 байта помещается элемент оглавления для найденного файла.

Можно использовать при вызове расширенный FCB, чтобы выбирать файлы с указанными атрибутами. В этом случае в DTA помещаются: байт FFh, 7 байт нулей, номер диска и элемент оглавления.

DOS, функция 12h Найти следующий совпадающий файл через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если подходящее имя найдено

DTA заполнен AL=FFh, если подходящего имени нет

Используется после вызова функции 11h (Найти первый совпадающий файл через FCB) с обобщенным именем файла. Каждый последующий вызов заполняет DTA очередным подходящим элементом оглавления и возвращает AL=00h. Если подходящих имен больше нет, возвращается AL=FFh.

Резервируемая область в FCB сохраняет информацию, необходимую для продолжения поиска. Поэтому не стоит открывать и изменять FCB между вызовами.

DOS, функция 13h Удалить файл через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно

AL=FFh, если файл не найден или доступ к файлу не разрешен

Эта функция удаляет все подходящие файлы в текущем оглавлении указанного диска согласно спецификации в FCB. Если подходящие файлы не найдены или если доступ отвергнут (как при попытке удалить файл с атрибутом Read-Only), функция возвращает в регистре AL значение FFh.

DOS, функция 14h Последовательное чтение из файла через FCB

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если чтение было успешным и DTA содержит данные

AL=01h, если достигнут конец файла (EOF) и данные не считаны

AL=02h, если произошел выход за сегмент (чтения не было)

AL=03h, если EOF и считана усеченная запись (дополнена нулями)

Функция читает файл, специфицированный в FCB. Затем соответственно увеличивает значения полей в FCB.

Перед началом последовательной обработки файла нужно сбрасывать CurRec в ноль, так как функция 0Fh не инициализирует это поле.

DOS, функция 15h Последовательная запись в файл через FCB

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если запись была успешной

AL=01h, если ошибка переполнения диска (данные не записаны)

AL=02h, если произошел выход за сегмент (записи не было)

Функция записывает файл, специфицированный в FCB. Затем соответственно увеличивает значения полей в FCB.

Перед началом последовательной обработки файла нужно сбрасывать «Номер текщей записи» в ноль, так как функция 0Fh не инициализирует это поле.

DOS буферизует данные, записывая полный сектор за один раз.

DOS, функция 16h Создание файла через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно FCB заполнен

AL=FFh, если при выполнении функции возникли ошибки

Описание. Файл, специфицированный неоткрытым FCB, создается на диске, указанном в FCB (0 – текущий, 1 – A и так далее). Он открывается в текущем оглавлении этого диска. FCB заполняется аналогично функции 0Fh. Если файл существует в момент вызова, его элемент оглавления перекрывается новым файлом, а длина файла сбрасывается в ноль.

Handle-ориентированные функции DOS 2.0+ гораздо удобнее в работе.

DOS, функция 17h Переименовать файл через FCB

DS:DX – адрес измененного FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно

AL=FFh, если при выполнении функции возникли ошибки

Переименовывает файл в текущем оглавлении.

DOS, функция 19h Получить текущий диск DOS

Выход: AL – номер текущего диска (0 – A, 1 – B, и так далее)

Возвращает номер дисковода текущего диска DOS.

DOS, функция 1Ah Установить адрес DTA

DS:DX – адрес DTA

Устанавливает адрес DTA. Все FCB-ориентированные операции работают с DTA. DOS не позволяет операциям ввода/вывода пересекать границу сегмента. Функции поиска 11h, 12h, 4Eh и 4Fh помещают данные в DTA. DTA глобальна, поэтому надо проявлять осторожность при назначении ее в рекурсивной процедуре. При запуске программы ее DTA устанавливается по смещению 80h относительно PSP.

DOS, функция 1Bh Получить информацию FAT для текущего диска

DS:BX – адрес байта FAT ID, отражающего тип диска (Таблица Б-3)

DX – всего кластеров (единиц распределения) на диске

AL – секторов на кластер

CX – байт на сектор

Таблица Б-3. Значения ID

Возвращает информацию о размере и типе текущего диска. Размер диска (в байтах) равен DX*AL*CX. Свободную память можно найти функциями 36h или 32h.

Версии: DOS 1.x держит FAT в памяти и возвращает DS:BX => FAT. DOS 2.0+ может держать в памяти лишь часть всей FAT.

Эта функция изменяет содержимое регистра DS.

DOS, функция 1Ch Получить информацию FAT для указанного диска

DL – номер диска (0 – текущий, 1 – A и так далее)

DS:BX – адрес байта FAT ID, отражающего тип диска (приведен в описании функции 1Bh)

DX – всего кластеров (единиц распределения)

AL – секторов на кластер

CX – байт на сектор

Аналогична функции 1Bh с той разницей, что регистр DL указывает диск, для которого нужно получить информацию.

DOS, функция 21h Считать произвольную запись файла

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если чтение было успешным и DTA заполнена данными

AL=01h, если достигнут конец файла (EOF) и чтения не было

AL=02h, если произошел выход за сегмент (чтения нет)

AL=03h, если встречен EOF и усеченная запись дополнена нулями

Данная функция читает из файла с текущей позиции как с указанной в полях FCB «Запись с текущей позиции» и «Номер записи при непосредственном доступе к файлу».

DOS, функция 22h Писать произвольную запись файла

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если запись была успешной

AL=01h, при переполнении диска

AL=02h, если DTA+FCB выходит за сегмент (нет записи)

Данная функция записывает в файл с текущей позиции как с указанной в полях FCB «Запись с текущей позиции» и «Номер записи при непосредственном доступе к файлу».

DOS, функция 23h Получить размер файла через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно

AL=FFh, если при выполнении функции возникли ошибки

Проще определить размер файла при помощи функции 3Dh с последующим выполнением 42h (при AL=2).

DOS, функция 24h Установить адрес произвольной записи в файле

DS:DX – адрес открытого FCB (Таблица Б-2)

Устанавливает поле «Номер записи при непосредственном доступе к файлу» в FCB на файловый адрес, соответствующий значениям полей «Текущий блок» и «Запись с текущей позиции».

DOS, функция 25h Установить вектор прерывания

AL – номер прерывания

DS:DX – вектор прерывания – адрес программы обработки прерывания

Описание. Устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL, равным DS:DX. Это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, DOS знает, что происходит, и гарантирует, что в момент записи прерывания будут заблокированы.

Восстановить DS (если необходимо) после этого вызова.

DOS, функция 26h Создать новый PSP

DX – адрес сегмента (параграфа) для нового PSP

CS – сегмент PSP, используемый как шаблон для нового PSP (Таблица Б-4)

Описание. Устанавливает PSP для порождаемого процесса по адресу DX:0000. Текущий PSP (100h байт, начиная с CS:0) копируется в DX:0000h, поле MemTop соответственно корректируется, векторы Terminate, Ctrl-Break и Critical Error копируются в PSP из векторов прерываний INT 22h, INT 23h и INT 24h. После этого можно загрузить программу с диска и передать ей управление посредством FAR JMP.

Если перехватывается INT 21h, нужно позаботиться о помещении в стек корректного CS: IP. Еще лучше использовать функцию 4Ch.

Таблица Б-4. Формат PSP

DOS, функция 27h Читать произвольный блок файла

DS:DX – адрес открытого FCB (Таблица Б-2)

CX – число считываемых записей

Выход: AL=00h, если чтение успешно и DTA заполнена данными AL=01h если достигнут конец файла (EOF) и данные не считаны AL=02h, если при чтении произошел выход за границу сегмента AL=03h, если EOF и считана усеченная порция (дополнена нулями) CX – действительное число считанных записей

Читает несколько записей из файла, начиная с файлового адреса, указанного полем «Номер записи при непосредственном доступе к файлу» в FCB. Помещает данные в память, начиная с адреса DTA. Соответствующие поля FCB корректируются, чтобы указывать на следующую запись (первую за прочитанными).

DOS, функция 28h Писать произвольный блок файла

DS:DX – адрес открытого FCB (Таблица Б-2)

CX – число записываемых блоков (если CX равен нулю, то размер файла усекается до указанного в поле FCB «Номер записи при непосредственном доступе к файлу»)

AL=00h, если запись успешна

AL=01h, при переполнении диска

AL=02h, если при записи произошел выход за границу сегмента

CX – действительное число сделанных записей

Описание. Записывает несколько блоков в файл, начиная с файлового адреса, указанного полем «Номер записи при непосредственном доступе к файлу» в FCB. Читает данные из памяти, начиная с адреса DTA. Соответствующие поля FCB корректируются, чтобы указывать на следующую запись (первую за прочитанными).

DOS, функция 29h Разобрать имя файла

DS:SI – адрес исходной текстовой строки для разбора

ES:DI – адрес буфера для результирующего неоткрытого FCB (Таблица Б-2)

AL – битовые флаги, указывающие опции разбора (Таблица Б-5).

AL=00h, если результирующий FCB не содержит обобщенных символов

AL=01h, если результирующий FCB содержит обобщенные символы

AL=FFh, если неверно обозначение диска в имени файла

DS:SI – изменен – указывает на символ сразу вслед за именем файла

ES:DI – не изменен – указывает на неоткрытый FCB

Создает неоткрытый FCB из строки текста или параметра команды. Текст, начиная с DS:SI, анализируется как имя файла в формате D: FILENAME.EXT, и буфер по адресу ES:DI заполняется как соответственно форматированный FCB.

Илон Маск рекомендует:  Php руководство по рнр 3 0 функции, связанные с http

Таблица Б-5. Битовые флаги

DOS, функция 2Ah Получить системную дату

AL – день недели (0 – воскресенье, 1 – понедельник, … 6 – суббота), DOS 3.0+

CX – год (от 1980 до 2099)

DH – месяц (1 до 12)

DL – день (1 до 31)

Описание. Возвращает текущую дату, которая известна системе.

DOS 2.x не гарантирует возврата в AL значения дня.

DOS 1.0+ возвращает правильный день недели.

Версии до 2.1 имеют проблемы с переходом через дату.

DOS, функция 2Bh Установить системную дату

CX – год (от 1980 до 2099)

DH – месяц (от 1 до 12)

DL – день (от 1 до 31)

AL=00h, если дата корректна

AL=FFh, если дата некорректна и не изменена

Устанавливает системную дату DOS.

DOS, функция 2Ch Получить время DOS


CH – часы (от 0 до 23)

CL – минуты (от 0 до 59)

DH – секунды (от 0 до 59)

DL – сотые доли секунды (от 0 до 99)

Описание. Возвращает текущее время, которое известно системе.

Поскольку системные часы имеют частоту 18.2 Гц (интервал 55мс), DL имеет точность примерно 0.04 сек.

DOS, функция 2Dh Установить время DOS

CH – часы (от 0 до 23)

CL – минуты (от 0 до 59)

DH – секунды (от 0 до 59)

DL – сотые доли секунды (от 0 до 99)

AL=00h, если время корректно

AL=FFh, если время некорректно и не изменено

Устанавливает системное время DOS.

DOS, функция 2Eh Установить/сбросить переключатель верификации

AL=00h – отключить верификацию

AL=01h – включить верификацию

Описание. Задает, должна ли DOS верифицировать (считывать обратно) каждый сектор, записываемый на диск. Это замедляет операции записи на диск, но гарантирует максимальную надежность записи.

DOS, функция 2Fh Получить адрес текущей DTA

Выход: ES:BX – адрес начала текущей DTA

Описание. Возвращает адрес начала области ввода-вывода (DTA). Поскольку DTA глобальна для всех процессов, в рекурсивной процедуре (например, при проходе по дереву оглавления) может потребоваться сохранить адрес DTA, а впоследствии восстановить его посредством функции 1Ah.

Примечание. Эта функция изменяет сегментный регистр ES.

Версии: DOS 2.00 и выше DOS, функция 30h Получить номер версии DOS

AL – старший номер версии

AH – младший номер версии

BL:CX – 24-битный серийный номер (большинство версий не поддерживают этот параметр)

Описание. Возвращает в AX значение текущего номера версии DOS. Например, для DOS 3.20 в AL возвращается 03h, в AH – 14h.

Примечание. Если в AL возвращается 00h, можно предполагать, что работает DOS более ранней версии, чем DOS 2.0.

Версии: DOS 2.00 и выше. DOS, функция 31h Завершиться и остаться резидентным

DX – объем памяти, оставляемой резидентной (в параграфах)

Описание. Выходит в родительский процесс, сохраняя код выхода в AL. Код выхода можно получить через функцию 4Dh. DOS устанавливает начальное распределение памяти, как специфицировано в DX, и возвращает управление родительскому процессу, оставляя указанную память резидентной (число байт равно DX*16). Эта функция перекрывает функцию INT 27h, которая не возвращает код выхода и не способна установить резидентную программу, размер которой превышает 64 Кбайт.

Действие int 21h

ааа ну вроде я понял вниз кароч отсчитываем пока не будет делимое число и количество отсчитываний и будет твой остаток?
число 150 /2 =7,1

слушайте мужики у меня еще вопрос

19.01.2012, 16:19

перехват int 21h
com 16 bit .286 ASKII_code_key_check equ ‘A’ ASKII_code_key equ ‘B’.

Int 21h — 3Ah
можно создать .exe файл, способный удалить директорию, путь к которой приходит из консоли(другая.

4ch int 21h НЕ освобождает память
Память резидента после выгрузки не освобождается! Я использовал int 21h с кодом 4ch. Потом.

Перемещение файла int 21h func 56
Нужно получить аргументами командной строки путь к файлу и его новый путь, то есть либо просто.

Ввод mov ah,06h int 21h
Нужно произвести ввод в 10сс, как отрицательных так и положительных чисел через это прерывание: mov.

Команды работы с каталогами и файлами в операционной системе Ms DOS

Цели урока:

  1. Выработка умений работы в операционной системе с использованием командной строки, применения теоретических знаний и возможностей операционной системы MS DOS на практике.
  2. Формирование информационной компетентности.
  3. Развитие интеллектуальных способностей и познавательных интересов школьников.

ХОД УРОКА

Организационная часть:

  • Проверка присутствующих, готовности класса и обучающихся к уроку (чистота в классе, наличие учебно-наглядных пособий, внешний вид обучающихся).
  • Проверка знаний обучающихся:
  • Путь к файлу.
  • Операции над файлами.
  • Операционная система: назначение и состав.

3. Теоретическая часть. Объяснение нового материала

Общие сведения о командах MS DOS

Команды — способ общения пользователя с компьютером в операционной системе.

Работа на компьютере в операционной системе MS DOS организуется командами. Они вызывают определенное действие в компьютере: организуют передачу информации; вырабатывают необходимый управляющий сигнал; подключают внешнее устройство для организации процесса ввода-вывода информации и т.д.

Команда технически реализована программой в машинных кодах и хранится либо в файле на диске, либо входит в состав командного процессора операционной системы MS DOS. Ввод команды осуществляется в командной строке в соответствии с определенными правилами, заданными в виде формата.

Командная строка — строка экрана, начинающаяся с приглашения операционной системы.

Формат команды — правило формирования команды пользователем с клавиатуры.

При формировании команды в соответствии с установленным форматом запомните правила:

  • формат команды состоит из имени команды латинскими буквами (без типа) и отделенных от нее одним пробелом параметров, уточняющих ее действие;
  • в большинстве случаев параметры между собой пробелом не разделяются, а в качестве разделителя часто используется символ / или \;
  • параметрами могут быть: имя дисковода, путь, имя файла, тип файла, латинские буквы, символы, цифры;
  • присутствие параметров в формате часто бывает необязательным.

Процедура ввода команды состоит в следующем:

  • В соответствии с форматом в командной строке вы набираете ее имя и необходимые параметры.
  • Нажимаете клавишу ввода, что служит сигналом начала анализа ее структуры: при отсутствии ошибок в формате команды будет выполнено указанное действие; при наличии ошибок на экране выдается сообщение Bad kommand or file name (Неверная команда или имя файла).
  • При невыполнении команды вы внимательно просматриваете заданную конструкцию команды и вновь вводите ее, но уже в откорректированном варианте.

Примечание. Появление ошибок возможно как во время выполнения команды, так и после ее окончания. Об этом будет свидетельствовать сообщение, указывающее на причину ошибки.

4. Опорный конспект:

Основные команды DOS

Команды работы с каталогами Команды работы с файлами
Команда смены текущего дисковода.

А: — переход на дисковод А:

С: — переход на дисковод С:

D: — переход на дисковод D:

Создание текстовых файлов. сopy con имя-файла

После ввода этой команды нужно будет поочередно вводить строки файла. В конце каждой строки нужно нажимать клавишу Enter, а после ввода последней – нажать клавишу F6 и затем Enter.

Создание каталога.

md [дисковод:] путь

Копирование файлов. copy имя-файла1 имя-файла2 или copy имя-файла1 [имя-каталога]
Изменение текущего каталога.

cd [дисковод:] путь

Переименование файлов. ren имя-файла1 имя-файла2
Уничтожение каталога.

rd [дисковод:] путь

Соединение (конкатенация) файлов.

copy имя-файла [+ имя-файла]. имя-файла

Удаление каталога со всем содержимым. deltree имя-файла-или-каталога [/Y] Удаление файлов.

del имя-файла

Просмотр каталога. dir [дисковод:][путь\][имя-файла] [параметры] Вывод файла на экран.

type имя-файла

Другие команды
Очистка экрана монитора.

cls

Вывод информации о дате и установка даты в компьютере.

date

Вывод информации о времени и установка времени в компьютере.

time [часы:минуты]

Получение информации о версии DOS.

5. Практическая часть.

Выполнение лабораторной работы.

Лабораторная работа №1

Работа с операционной системой MS DOS

Задание Выполнение
Запустить Командную строку Пуск – Программы – Стандартные — Командная строка
Выполнить команду просмотра логического устройства dir
В корневом каталоге диска создайте директорий, назовите своей фамилией. md IVANOV
Проверить наличие созданного каталога при помощи команды DIR.
Сделать каталог IVANOV текущим cd IVANOV
Создать в каталоге IVANOV каталог с номером лабораторной работы md LAB1
Сделать каталог LAB_1 текущим cd LAB1
Создать в текущем каталоге файл с расширением .txt и именем, соответствующем вашему реальному имени. Ввести фамилию, дату выполнения работы. copy con IVAN.txt

Нажать F6 для выхода из режима редактирования.

Создать текущем каталоге файл text1.txt. Ввести “Я изучаю DOS” copy con text1.txt

Я изучаю DOS F6

Создать в текущем каталоге каталог с именем COPYTEST md COPYTEST
Копировать файл text1.txt в каталог COPYTEST copy text1.txt D:\IVANOV \LAB1\COPYTEST
Копировать файл IVAN.txt в каталог COPYTEST с переименованием на PETR.txt copy IVAN.txt D:\IVANOV \LAB1\COPYTEST\PETR.txt
Переместиться в на уровень выше cd ..
Выполнить команду просмотра каталога Dir
Переместить файл text1.txt в каталог IVANOV: move text1.txt D:\ IVANOV
Переместить файл IVAN.txt в каталог IVANOV с переименованием на MARIA.txt move IVAN.txt D:\ IVANOV\ MARIA.txt
Проверить наличие файла в каталоге IVANOV при помощи команды DIR.

6. Практическая работа (раздаточный материал)

Работа с файлами и каталогами в DOS

  • Создать каталог d:\ (Своя фамилия)
  • Создать систему подкаталогов в каталоге d:\ (Своя фамилия) по следующему ОБРАЗЦУ:
  • В каталоге DIR1 создать файл wan.txt
  • В каталоге DIR2 создать файл tu.txt.
  • Скопировать файл wan.txt в каталог INF2 с переименованием на tir.txt
  • Переместить файл tu.txt d в каталог INF2 с переименованием на tir.txt
  • На диске D в личном каталоге создать каталог CHET
  • Создать систему подкаталогов в каталоге CHET по образцу
  • В каталоге DOS1 создать файл ban.txt.
  • В каталоге ZAH2 создать файл mu.txt.
  • Скопировать файл ban.txt в каталог DOS2 с переименованием на tvr.txt
  • Переместить файл mu.txt в каталог DOS2 с переименованием на bir.txt
  • Вывести на экран содержимое каталога DOS2
  • На диске D в личном каталоге создать каталог TROL
  • Создать систему подкаталогов в каталоге TROL :
  • В каталоге KONT1 создать файл ran.txt.
  • В каталоге KONT2 создать файл man.txt. редакторами текстов.
  • Скопировать файл man.txt в каталог BOSS1 с переименованием на tnt.txt
  • Переместить файл ran.txt в каталог BOSS2 с переименованием на bat.txt/
  • Вывести на экран содержимое каталога BOSS2
  • Создать каталог d:\ (Своя фамилия)
  • Создать систему подкаталогов в каталоге d:\ (Своя фамилия) по следующему ОБРАЗЦУ:
  • В каталоге DAR1 создать файл dan.txt.
  • В каталоге DАR2 создать файл din.txt.
  • Скопировать файл dan.txt в каталог LAIT2 с переименованием на tan.txt
  • Переместить файл din.txt d в каталог LAIT2 с переименованием на tin.txt
  • Вывести на экран содержимое каталога LAIT2
  • На диске D в личном каталоге создать каталог RIM
  • Создать систему подкаталогов в каталоге RIM по образцу
  • В каталоге ROS1 создать файл bon.txt.
  • В каталоге RAH2 создать файл son.txt.
  • Скопировать файл bon.txt в каталог ROS2 с переименованием на ton.txt
  • Переместить файл son.txt в каталог ROS2 с переименованием на don.txt
  • Вывести на экран содержимое каталога ROS2
  • На диске D в личном каталоге создать каталог TRON
  • Создать систему подкаталогов в каталоге TRON :
  • В каталоге KON1 создать файл ron.txt.
  • В каталоге KON1 создать файл mon.txt.
  • Скопировать файл ron.txt в каталог BOR2 с переименованием на ton.txt
  • Переместить файл mon.txt в каталог BOR2 с переименованием на bon.txt
  • Вывести на экран содержимое каталога BOR2
  • Создать каталог c:\ RABOTA_1
  • Создать систему подкаталогов в каталоге c:\RABOTA_1 по следующему дереву:
  • В каталоге PAP1 создать файл wan.txt,
  • В каталоге РАР2 создать файл tu.txt
  • Скопировать файл wan.txt в каталог LIST2
  • Перенести файл tu.txt в каталог LIST2
  • Вывести на экран содержимое каталога LIST2

Опорный конспект, основные команды работы с файлами и каталогами в операционной системе MS DOS

Основные команды операционной системы MS DOS

COMMAND.COM содержит следующие три вида команд, представленные в табл. 2.3.

Виды команд в MS DOS

Вид команды Расширение имени Примеры
1. Внутренняя DIR, REN, TYPE и т.д.
2. Внешняя .COM или .EXE lex.com, debug.exe, format.com и др.
3. Пакетная .BAT Файлы, содержащие мно-жества перечисленных выше команд.

Все файлы, содержащие расширение «.COM» или «.EXE«, можно использовать как внешние, при этом допускается имена файлов указывать в сокращенной форме, без расширения «.COM» или «.EXE«.

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

Пакет – это файл, в котором записаны все требуемые для выполнения команды.

Каждый пакетный (или командный) файл должен иметь расширение «.BAT«

Пакетный файл можно создать командой COPY или любым текстовым редактором. Каким образом это осуществляется, будет изложено в последующих темах.

Команда смены текущего дисковода

Команда смены текущего (активного) дисковода (устройства, или накопителя) содержит имя требуемого дисковода с последующим двоеточием:

После набора команды должна быть нажата клавиша «Enter».

C>A: Enter

В этом примере дисковод C: (НЖД, или винчестер) сменен на дисковод A: для гибких магнитных дисков.

Ниже представлены основные команды операционной системы MS DOS, которые рассматриваются в данной лабораторной работе.

VER – выводится на экран дисплея номер версии операционной системы, которая загружается при запуске компьютера.

DIR – выводит на дисплей список файлов каталога.

TYPE – выводит на экран дисплея содержимое текстового файла.

TIME – выводит на экран дисплея текущее системное время.

DATE – отображает используемую MS DOS текущую системную дату.

MD (MKDIR) – создает новые каталоги (или подкаталоги).

CD – позволяет сменить текущий каталог.

RD – позволяет удалять подкаталог.

COPY – позволяет копировать файлы или группы файлов.

REN (RENAME) – позволяет переименовывать отдельные файлы или группы файлов.

DEL (ERASE) – позволяет удалять файлы.

TREE – выводит на экран дисплея все каталоги или их иерархическую структуру.

Рассмотрим более подробно каждую из приведенных выше команд.

VER

Тип команды: внутренняя.

Функции: выводится на экран дисплея номер версии операционной системы, которая загружена при запуске компьютера.

На экран выводится сообщение вида

MS-DOS Version 5.00

DIR

Тип команды: внутренняя.

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

Формат использования команды:

/z – комбинация из дополнительных параметров (ключей).

Если не задан дисковод (disk:) или путь (path\), то подразумевается текущий дисковод или текущий каталог. Если не задано имя файла (filename), то выводится все содержимое каталога. При задании имени файла допускается использование шаблона.

В качестве комбинации /z могут использоваться следующие параметры или ключи:

/P – (Pause или Page) приостанавливает вывод списка файлов каждый раз, когда заполняется экран дисплея. После нажатия любой клавиши вывод продолжается;

/W – (Wide Display или Width) обеспечивает вывод в уплотненной форме, т. е. пять имен в одной строке, при этом указываются только имена файлов и каталогов;

/A:атрибуты – выводит только те файлы, которые имеют указанные атрибуты. Возможны следующие сокращения для требуемых атрибутов:

A (archive – архивировать);

R (read-only – защищенный от записи);

Поставив перед каталогом знак минус («-«, черточку), можно изменить значение атрибута на противоположное.

обеспечивает вывод списка всех нескрытых файлов.

Двоеточие («:«) перед перечислением требуемых атрибутов можно опускать.

/O:критерий – (Order) обеспечивает упорядочение выводимого на экран списка файлов в соответствии с заданным критерием. Допускаются следующие сокращения для критериев сортировки:

N – в алфавитном порядке имен (Name);

E – в алфавитном порядке расширений (Extension);

T – по времени создания (Time).

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

Двоеточие («:«) перед перечислением требуемых критериев можно опускать!

/S – вывод на экран списка файлов не только из указанного каталога, но и из всех подчиненных подкаталогов (Subdirectories):

/B – вывод на экран только имен файлов без дополнительной информации. Для каждого файла используется отдельная строка на экране дисплея;

/L – вывод на экран имен осуществляется строчными буквами.

Параметры (ключи) /A:, /O:, /S, /B и /L реализованы только в версии MS DOS 5.00 и выше. В более ранних версиях использовались ключи /P и /W.

На экран дисплея выводится список имен всех файлов, имеющихся в корневом каталоге диска A:.

При этом отображается следующая информация:

– метка тома (имя носителя данных, если оно задано);

– имя файла с расширением и размер файла или имя подкаталога с пометкой ;

– дата и время последнего изменения файла;

– количество файлов в текущем каталоге;

– размер свободного пространства на дискете.

Выводится список всех файлов, находящихся в каталоге D:\TP и имеющих расширение .PAS.

Выводит список всех файлов текущего каталога дисковода B:. В каждой строке экрана помещается информация для пяти файлов в порядке их следования. Размер файлов, дата и время их создания не указываются.

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

После заполнения экрана будет выведено сообщение:

Strike a key when ready

(Нажмите любую клавишу, когда будете готовы)

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

Выводит список файлов корневого каталога (Root) текущего дисковода (за исключением скрытых файлов).

Выводит список всех файлов с расширением .PAS, которые расположены в каталоге, верхнем (родительском) подкаталоге по отношению к текущему.


Выводится список всех скрытых и не защищенных от записи файлов корневого каталога текущего дисковода.

Выводит на экран только те файлы из каталога DOS диска C:, имена которых начинаются с буквы F и содержат не более пяти символов при любых расширениях.

TYPE

Тип команды: внутренняя.

Назначение: просмотр информации, содержащейся в файле, на экране дисплея.

Если disk: или path\ не указаны, то при выполнении команды будет подразумеваться текущий диск или каталог.

1. Внутри имени файла символы маски (* ?) не допускаются. Для определения имени файла используется команда DIR.

2. Команда TYPE обычно используется для вывода на экран содержимого текстового файла.

3. Вывод на экран можно приостановить нажатием Ctrl+S и продолжить их повторным нажатием (либо нажатием какой-либо клавиши).

Выводит на экран дисплея содержимое текстового файла HS.txt, который находится в подкаталоге MD1 диска A:.

Выводит содержимое текстового файла lex.doc, который находится в текущем каталоге и на текущем диске.

TIME

Тип команды: внутренняя.

Назначение: вывод на экран текущего времени и установка нового времени.

Формат использования команды:

hh – часы (24-часовой цикл), число, состоящее из одной или двух цифр (0-23);

mm – минуты, число, состоящее из одной или двух цифр (0-59);

ss – секунды, число, состоящее из одной или двух цифр (0-59);

cc – сотые доли секунды, число, состоящее из одной или двух цифр (0-99);

a|p – при использовании 12-часового формата времени указывает на то, о каком времени идет речь: о дополуденном (A.M.) или послеполуденном (P.M.).

Если параметр P.M. не задается, то MS DOS считает, что речь идет о дополуденном времени A.M.

Правильными разделителями являются двоеточие («:«) и точка («.»). Возможно использование в качестве разделителей только точки («.»). Если пользователь вводит неправильное время или неверные разделители, то система MS DOS повторяет запрос времени. Иногда в некоторых версиях MS DOS для разделения отдельных элементов вместо двоеточия необходимо использовать другие символы, например, черточку.

На экран будет выведено сообщение:

Current time is 8:12:00.64a

(Текущее время 8:12:00.64a)

Enter new time:_

(Введите новое время:_)

Если время изменяться не будет, то необходимо нажать клавишу Enter. Если необходимо ввести новое время, то следует ввести цифрами текущее время, например:

и нажать клавишу Enter.

Если задание времени произведено неверно или задан неправильный разделитель, то выводится сообщение:

(Введите новое время:)

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

DATE

Тип команды: внутренняя.

Назначение: установка или вывод на экран текущей даты.

Формат использования команды:

mm – число, состоящее из одной или двух цифр 1-12 (обозначающее месяц);

dd – число, состоящее из одной или двух цифр 1-31 (обозначающее день месяца);

yy – число, состоящее из двух цифр 80-99 (обозначающее год 1980-1999, предполагается, что первые две цифры 19) либо число, состоящее из четырех цифр 1980-2099.

Выше представлен американский стандарт формата команды DATE.

Кроме этого, существует европейский ( — — ) и восточноазиатский ( — — ) стандарты.

Вид представления даты определяется установкой кода страны в файле CONFIG.SYS командой COUNTRY, которые в данной работе не рассматриваются.

Разделителями могут служить знаки:

На экране появится сообщение:

Current date is sun 01-26-1994

Enter new date (mm-dd-yy):

(Введите новую дату (mm-dd-yy):)

Если нажать клавишу Enter, то эта дата останется неизменной.

Если же необходимо ввести новую дату, то следует ввести цифрами новую дату, например:

и нажать клавишу Enter.

Если задание времени произведено неверно или задан неправильный разделитель, то выводится сообщение:

Enter new date (mm-dd-yy):

(Введите новую дату (mm-dd-yy):)

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

MD (илиMKDIR)

Тип команды: внутренняя.

Назначение: команда MD (Make Directory) создает новый подкаталог в указанном каталоге.

Формат использования команды:

MD [disk:][path\] dirname

dirname – имя создаваемого каталога.

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

Если не указано имя диска disk:, то подразумевается текущий диск.

Если не указан путь path\, каталог создается в текущем каталоге текущего или указанного диска.

В текущем каталоге создается подкаталог TL1.

В корневом каталоге дискеты A: создается подкаталог DOS.

Создает на дискете A: в каталоге DOS подкаталог BATCH.

CD (илиCHDIR)

Тип команды: внутренняя.

Назначение: (Change Directory – сменить каталог) изменяет текущий каталог, отображает на экране дисплея имя текущего (рабочего) каталога.

Формат использования команды:

disk: – определяет дисковод, для которого необходимо изменить или вывести текущую директорию;

path\ – определяет путь, по которому можно достичь того каталога, в который необходимо перейти.

1. Если указан disk:, то путь path\ задается от корневого каталога заданного диска.

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

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

4. Для перехода в каталог предыдущего уровня (ро­ди­тель­ский каталог) используются символы «..» (две точки).

5. Описание пути к нужному каталогу от корневого каталога начинается с символа «\».

Левая косая черта («\»Backslash), расположенная в начале пути, символически воплощает корневой каталог, для которого не существует собственного имени .

6. Если, находясь в главном (корневом) каталоге Root, выполнить команду

появится сообщение об ошибке:

так как для корневого каталога это невозможно.

Осуществляется переход из текущего каталога в подкаталог TL1. Каталог TL1 становится текущим каталогом.

Выводит имя текущего каталога на текущем диске.

Вывод имени текущего каталога на диске F:, который не является текущим.

Переход в каталог, расположенный на 1 уровень выше, т. е. в родительский каталог.

Переход в корневой каталог текущего дисковода (первая косая черта «\» обозначает корневой каталог).

Переход на дисковод A: в корневой каталог (Root), т.е. активным является корневой каталог дисковода A:.

Переход от текущего корневого каталога диска A: через «дочерний» каталог BOOKS к каталогу-«внуку» FICTION, который и становится текущим.

Переход на два каталога «вверх».

RDилиRMDIR

Тип команды: внутренняя.

Назначение: (Remove Directory) уничтожение (удале-ние) каталога.

Формат использования команды:

RD [disk:][path\] dirname,

disk: – имя дисковода, на котором находится удаляемый каталог;

path\ – путь к удаляемому каталогу;

dirname – имя удаляемого каталога.

Внимание! Удалять можно только пустой каталог, т. е. каталог, не содержащий файлов и подкаталогов (Subdirectories).

1. Если на первом месте в обозначении пути поиска стоит обратная (левая) косая черта (Backslash«\»), то удаляемый каталог надо искать, начиная с корневого.

Если этот символ опущен, то MS DOS будет искать удаляемый каталог, начиная с текущего каталога.

Другими словами, первым способом задается “абсолютный» путь, а вторым – «относительный«.

2. Корневой каталог (Root) нельзя удалить командой RD.

3. Нельзя уничтожить текущий каталог!

Из текущего каталога удаляется подкаталог TEST.

Удаляется подкаталог VS из каталога PROGS диска A:.

COPY

Тип команды: внутренняя.

Назначение: копирует один или несколько файлов на другое дисковое устройство и присваивает скопированному файлу другое имя в том случае, когда это имя задано в команде COPY.

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

При выполнении команды COPY может быть выполнена конкатенация (объединение) файлов.

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

Форматы использования команды:

COPY pathname1 [switches] [pathname2] [switches]

pathname1 – задает источник копирования: имя файла (или файлов – при этом допускается использование шаблона) или имя каталога, если необходимо скопировать все файлы каталога;

pathname2 – задает назначение копирования (цель). Если pathname2 не задано, то файлы копируются в текущий каталог с сохранением имени.

Если pathname2 – имя каталога, то файлы копируются в указанный каталог также с сохранением имен.

Если pathname2 – имя файла, то источник копируется в файл с указанным именем.

switches – ключи, допускаемые при выполнении команды COPY:

/A –файл обрабатывается как текстовой в кодах ASCII;

/B – файл обрабатывается как двоичный файл;

/V – (Verify – проверить) проверяет, правильно ли записаны данные в целевой файл (назначение).

При копировании допускается использование логических устройств, например, CON – консоль (клавиатура – при вводе, дисплей – при выводе), PRN – принтер (только как выходной файл).

Использование этих устройств будет рассмотрено в последующем материале.

Формат использования команды COPY для конкатенации файлов имеет следующий вид:

COPY pathname1[+pathname2+. ] [pathname]

Источник представляет собой перечень файлов, соединенных знаком «+» (плюс), при этом допускается использование шаблона.

Не следует использовать имена файлов источника (кроме первого имени) в качестве имени файла назначения: это приведет к потере информации.

Если файл назначения не указан, то его имя совпадет с именем первого файла источника.

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

1. В команде сначала указывается входная спецификация, затем – выходная.

2. Если не указано имя диска, подразумевается текущий диск (это относится как к диску-источнику, так и к диску-приемнику).

3. Если не указан путь, подразумевается текущий каталог (как на диске-источнике, так и на диске-приемнике).

4. Во входной спецификации допустимо использование шаблонов групповых операций. Если во входной спецификации указан путь, но опущено имя файла вместе с расширением, подразумевается спецификация *.*.

5. В качестве входной или выходной спецификаций допустимо использовать имена устройств.

6. Если в выходной спецификации отсутствует имя файла, выходные файлы принимают имена входных.

7. При копировании с диска на диск файлы рассматриваются как двоичные (т. е. по умолчанию действует ключ /B).

8. При копировании с или на устройство файлы рассматриваются как текстовые (т. е. по умолчанию действует ключ /A).

Примечания к операциям копирования с указанием одной спецификации.

1. Указывается входная спецификация.

2. Выходной спецификацией считается текущий диск или текущий каталог; копируемым файлам даются имена входных.

3. Во входной спецификации либо диск, либо путь, либо то и другое должны отличаться от текущих (файл нельзя копировать «на себя»).

4. Выходная спецификация не может описывать устройство.

5. Копируемые файлы рассматриваются как двоичные (т. е. по умолчанию действует ключ /B).

Примечания к операциям объединения.

1. Символ «,,» (две запятые), вводимый после знака «+», указывает MS DOS, что список входных файлов исчерпан.

2. Объединяемые файлы считаются текстовыми. При объединении двоичных файлов необходимо указывать ключ /B.

COPY TS1.PAS TS2.PAS /V

В текущем каталоге создается копия файла под другим именем (с целью, например, последующей модификации). Копирование сопровождается проверкой правильности записи (ключ /V).

Файл LIB.txt из текущего каталога диска F: копируется на дискету, не имеющую древовидного каталога, либо в текущий каталог дискеты A:.

Файл с дисковода A: копируется на дисковод B: под тем же именем. На компьютере с одним дисководом DOS перед копированием запросит установку дискеты для копии.

F:>COPY \DOSDOC\BOOK\ch1.txt \WORDS\ch2.doc

Копирование файла ch1.txt из каталога \DOSDOC\BOOK в каталог \WORDS с изменением имени на ch2.doc. Оба каталога находятся на текущем диске F:.

Копирование всех файлов с расширением C из текущего каталога диска F: в текущий каталог диска A: под тем же именем.

Копирование всех файлов из текущего каталога диска A: в текущий каталог текущего диска F: под теми же именами.

Входной файл VP.PAS копируется «сам в себя» с изменением даты и времени создания на текущие.

Файл DTA.C копируется в текущий каталог текущего диска. Имя файла назначения (целевого файла) не задано, поэтому в текущем каталоге создается копия этого файла под тем же именем. Если активным будет дисковод A:, будет выдано сообщение:

File cannot be copied onto itself

(Файл не может быть скопирован сам на себя).

Копируются данные, которые вводятся через клавиатуру в файл h1.bat. После ввода этой команды можно набирать текст через клавиатуру. Чтобы записать этот файл в память, необходимо нажать клавишу F6 или одновременно клавиши Ctrl+Z, а вслед за этим – Enter. При этом на экране дисплея появляются символы ^Z, и этот файл записывается на дискету или жесткий диск.

С помощью этой команды текст, набираемый на клавиатуре, будет печататься на принтере, т. е. компьютер превращается в пишущую машинку! После набора текста и нажатия клавиш Ctrl+Z, а затем Enter, весь текст будет отпечатан на принтере.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Увлечёшься девушкой-вырастут хвосты, займёшься учебой-вырастут рога 9790 — | 7665 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Dos fn 24h: установить адрес произвольной записи в файле

Версия для печати (стр. 2)

Конференция: Конференция iXBT.com (http://forum.ixbt.com/)
Форум: Магнитные и SSD накопители (http://forum.ixbt.com/? >
URL: http://forum.ixbt.com/topic.cgi? >
Время GMT +03. Даты в формате dd.mm.yyyy.
101. Ahai , 14.03.2010 11:37
kadavra
Firmware: SD15

Ну да. Она самая. Проблемная.
[FAQ] Обсуждение винчестеров Seagate Barracuda 7200.11 и ES.2 (часть 2) (http://forum.ixbt.com/topic.cgi? >
Попробуйте под DOS в MHDD. (smart att)
Ну если он и там SMART не отдаст, то похоже совсем плохо дело.

102. rdzviper , 14.03.2010 12:24
Добрый день!
Случилась следующая ситуация.
По дурости при объединении 2 разделов снес Paragon`ом один(сколько раз говорил себе аккуратней быть с этим ). После перезагрузки на 1 разделе все осталось нормально(NTFS), на втором-неотформатированная область.
Всякие утилиты типа Active@ Partition Recovery, Acronis RecoveryExpert, Partition Table Doctor долго сканируют диск и потерянный раздел не находят.
Однако банальная утилита восстановления типа GetDataBack for NTFS на диске спокойно видет 3 NTFS раздела, читает на пропавшем разделе все файлы(сканируя все сек 30 при выборе Quick Scan), показывает информацию о разделе и т.д.. GetDataBack к сожалению демо, и функция копирования там запрещена, восстанавливать разделы не умеет.
Собственно вопрос:
Можно ли(и какой утилитой) восстановить раздел? Если нет, то чем скопировать файлы?
Пропадет ли вся инфа, если я создам заново в этой области NTFS раздел а потом восстановлю с помощью я GetDataBack (в смысле перезатрется ли NTFS таблица)?
103. na.vy , 14.03.2010 16:18
Antech
Не несуществующие, а нераспределенные. Забейте, это не проблема.

У Вас на самом деле есть в AMBR-0 косячек с размером раздела (вернее, расширенной области), но хрен с ним: работает — и ладно. Потому что если с этим заморачиваться, то надо проверять все AMBR (это лениво), а поведение Винды все равно не изменится: разделы и так монтируются и работают нормально.
Я такой глючок не первый раз замечают: люди живут с этим и не знают, что у них на почве Акронисов-Партмагов не все гладко в PT . Меньше знаешь — лучше спишь .

Понятно.

.
Да.

Хорошо.
Ещё раз спасибо.


104. Leo , 14.03.2010 21:39
Golder123:
После чекдиска — только каждый файл по отдельности собирать. Ну или искать по всему разделу возможно сохранившиеся старые записи MFT, может для каких-то файлов удастся найти неповрежденные «реликты».

Добавление от 14.03.2010 21:42:

kadavra:
Сначала SMART. Потому как, судя по описанию, «втупую Getdataback» скорее всего дойдет до первого дефекта и все повиснет.

Добавление от 14.03.2010 21:45:

цитата: rdzviper:
(в смысле перезатрется ли NTFS таблица)?

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

105. a.spb , 14.03.2010 21:49
Antech, Вы, должно быть, не заметили моё сообщение.Посмотрите его (http://forum.ixbt.com/topic.cgi? >
106. kadavra , 14.03.2010 23:13
Ahai
Leo

по моим наблюдениям доступ к файлам на диске терялся постепенно — неделю назад проблемы при копировании файлов с этого диска возникали, но редко, а сегодня я смог скопировать только несколько файлов + проводник сегодня начал подвисать когда я открывал папки. Тем не менее XP видит и сам раздел и папки в нем. Дискменеджер XP утверждает что диск здоров. все таки я запустил getdataback. Не виснет. Нашел мои файлы:
Mft entry found @ sector 88431322: ‘_DSC4021.jpg’
Mft entry found @ sector 88431324: ‘_DSC4021.NEF’
.
Но стабильно выдает ошибку:
Error 1117 in HD128: during ReadLba: LBA=89084715, CHS=-1x-1x-1, Cnt=64
Error 1117 in HD128: during ReadLba: LBA=89084779, CHS=-1x-1x-1, Cnt=64
.
без SMART не возвращаться?

107. Antech , 14.03.2010 23:14
a.spb
Упс, не заметил.
170 096 220.

kadavra
Просканируйте в MHDD.
Покажите SMART (MHDD, Victoria, HDDScan).

7200.11, конечно, мухоопасны. Но у Вас не муха (винт определяется) и не LBA-0 (определяется на полный объем 750 GB). Так что, скорее всего, винт уже полноценный cadaver и «народная антимуха» нему не поможет. Но, на всякий, посканируйте в MHDD.

wolf30
Включите винт без коробки и проверьте. Как разобрать — это другой вопрос, это я не могу знать (не пользуюсь готовыми коробко-винтами).

rdzviper
банальная утилита восстановления типа GetDataBack for NTFS
Ну нифига себе банальная, это одна из лучших в классе.

Можно ли восстановить раздел?
Точно нельзя сказать. Откройте физический в DMDE и покажите скрин окна «Разделы» (с отмеченной галкой «найденные»). Если там нет нужного раздела, сделайте «Поиск NTFS» и покажите результат (скрин и лог).
Сколько было разделов (3?), с какими ФС (NTFS?) и какого размера? Какие объединяли (1 и 2?) и какой удалили (2?)? Эти вопросы в шапке не просто так.
Вы начали объединение или не успели? Или объединение завершилось и в результате такой косяк?

если я создам заново в этой области NTFS раздел
Не надо.
При простом создании раздела в Управлении Дисками (без формата) много не испортится (затронется таблица и, возможно, бутсектор). Но все равно это не нужно, и вообще не нужно пытаться чем-то исправлять. Вначале без инвазии, по результатам посмотрим, что лучше сделать.

108. mc-roma , 14.03.2010 23:36
wolf30
биос видит ваш винт подключенный? у вас еще гарантия есть? если так то несите его по гарантии — замена неплохая перспектива. если нет то ищите как разобрать — либо на болтах крепиться под наклейками либо на защелках. в интернете думаю как его разобрать найти несложно.
и еще какие проблемы с ним уже были? что именно вы лечили акронисом? вы его отключали через безопасное удаление?
109. wolf30 , 14.03.2010 23:59
mc-roma
винт на зашелках но они просто намертво стоят если применить грубую силу то по гарантии со сломанной крышкой его уже не примут, но с другой сторны не хотелось бы потерять информацию которая на нем

винт подключается по usb его и раньше биос не видел(материнка старая)

не возможно было зайти «ошибка отказано в доступе» запускал акронис нажимал проверить и все работало

попробовал GetDataBack раньше про такую не слышал та же ошибка что и у kadavra
Error 1117 in HD131: during ReadLba: LBA=256, CHS=-1x-1x-1, Cnt=64
меня еще смушает что 320 гб винт определяется как 2 терабайтный, иногда сталкивался что больший винт определяется как меньший но что бы меньший определялся как почти в 6 раз больший?

110. mc-roma , 15.03.2010 00:53
wolf30
разбирайтесь вот с этим. может поможет.
http://seagate.custkb.com/seagate/crm/selfservice/se….jsp?Doc >http://seagate.custkb.com/seagate/crm/selfservice/se….jsp?Doc >а вот это могло помочь наверное вместо акрониса. http://seagate.custkb.com/seagate/crm/selfservice/se….jsp?Doc >а это так в общем о внешних дисках.
Обсуждение статьи iXBT.com: «Внешние жесткие диски Seagate FreeAgent | Desk и Xtreme» (http://forum.ixbt.com/topic.cgi? >да и поищите в гугле другую инфу. возможно найдете что-нибудь полезное. у многих такие же проблемы. и не забудьте с нами поделиться
111. Antech , 15.03.2010 09:33
wolf30
меня еще смушает что 320 гб винт определяется как 2 терабайтный
Вот именно. И пока не вытащите из коробки, виновника не определите (коробка или винт).

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

112. SharkyEXE , 15.03.2010 13:11
Antech (http://forum.ixbt.com/users.cgi? >

цитата (Antech): Дело не в этом. Исправление сразу запускать нельзя. Вначале проверяется, на что ругается Чекдиск. Вы уже исправили, поэтому ни к чему смотреть, что он пишет теперь, хоть с /f, хоть без /f.

цитата (Antech): Какой объем винта в LBA показывает HDDScan?

цитата (Antech): Почему Вы так сильно заботитесь о разделе «E»? Ведь пока у Вас нет бэкапа, Вы не защищены от физического умирания винта, даже если он эксплуатируется в идеальных условиях и постоянно мониторится SMART. А при физическом накрытии винта Вы ничего не сделаете самостоятельно, придется обращаться в фирму, весьма вероятно, что за большие деньги. Поймите: вероятность накрытия раздела из-за каких-то незамеченных при восстановлении глючков намного меньше, чем вероятность физического накрытия диска. И это не учитывая вирусы (например, АнтиДуров), форс-мажоры и т.д.

К сообщению приложены файлы: 1.gif, 1288×1615, 69Кb

113. Antech , 15.03.2010 14:13
SharkyEXE
в каких случаях исправление сразу запускать нельзя?
В любых (если есть нужное и незабэкапленное).

ненахождении файлов vmware.log
На скринах у Вас минорные ошибки, как я понял, они исправлены и сейчас проблем не находится. Так что с ФС все должно быть нормально.
У Вас ведь начало второго раздела было смещено вправо на десятки ГБ, и в новом начале раздела был бутсектор, да? Поэтому что-то, естественно, повредилось (ведь все это великолепие было записано в пространство, принадлежавшее существующему второму разделу). Так что ФС поправлена чекдиском, но могут, например, быть повреждены некоторые файлы (какие конкретно — неизвестно, т.к. мы не знаем, куда была запись, она могла быть далеко не только в новый [смещенный] бутсектор).

из-за чего люди наиболее часто обращаются в DP-фирмы?
Без понятия. Это Вы у DR спросите, а я — энергетик, я топки считаю.
— Это Вы у врача спросите.
— А Вы кто?
— А мы — маляры, мы тут стены красим .

мне хочется предупредить потерю данных
Следите за режимом работы винта. Он должен хорошо питаться, не перегреваться, не испытывать вибраций и других внешних мех-воздействий. Это уменьшит вероятность выхода винта, но все равно не спасет данные. Поэтому в добавление обязателен бэкап. Самое малоценное (типа дистрибов) — одна резервная копия. Важное (рабочие материалы, коллекция музыки/фильмов) — две или три копии, возможно в разных местах (территориально). Естественно, разные копии должны быть на разных физических девайсах, иначе какой же это бэкап.

114. a.spb , 15.03.2010 14:45
Antech
Патч MFT. DMDE — физический диск — сервис — заполнить секторы — файл. Первый сектор 24, число секторов 6. Номер сектора — от начала раздела. Начальный сектор раздела (если Вы его не знаете) смотрится после открытия физического в DMDE (Относит. смещение) или WinHex (правый столбец в таблице). Поэтому «Первый сектор» у Вас должен быть равен «Начальный сектор раздела» + 24. Перезагрузитесь и попробуйте зайти в раздел. (Не допускайте Чекдиск, не отходите от компа при перезагрузке!) Скорее всего, раздел не откроется. Тогда запустите cmd.exe, а в нем — chkdsk.exe БукваРаздела: и покажите результат.

И спасибо за Вашу помощь!

115. Antech , 15.03.2010 18:29
a.spb
Запись атрибута (128, «») в сегменте записи файла 0 повреждена
Сейчас провел эксперимент. Превознемогая дебильное ограничение доступа на запись в Win-7, я все-таки проверил патч. Действительно Чекдиск недоволен атрибутом DATA в $MFT. Это опасное недовольство и нужно было найти причину. Проверил еще раз — все правильно в этом атрибуте. Ладно, дал ему исправить — это самый верный способ анализа причины (только на опытном разделе, ессно). Результат: исправил пару минорных ошибок, не относящихся к атрибуту DATA. Конкретно недовольство было связано с Next attribute ID в заголовке File record (было 3, а DATA и BITMAP имели 5 и 4 соответственно). Вот ведь программа: вместо того, чтобы исправить Next attribute ID, ругается на совершенно нормальный атрибут (чекдиск фактически не стал его править), и при этом ни в какую не хочет говорить, что конкретно ей не нравится. Как всегда, двойка Микрософту за лохо-ориентированность софта (даже такого специализированного, как Чекдиск) и за то, что мне пришлось потратить полчаса на выпытывание причины недовольства проги. No respect.
Ладно, эксперимент показал, что Вы можете давать chkdsk.exe G: /f (кстати, мой опытный раздел тоже имеет букву G ), а другие ошибки не опасны (максимум один файл пострадает, ну это естественно, что-то ведь кроме MFT записывалос при наличии интерфейсных ошибок). Скорее всего, все исправится нормально. Но, как всегда, на 100% гарантии не даю, так что, если есть что-то особо важное, скопируйте через Recuva или R-Studio.
116. a.spb , 15.03.2010 22:41
Antech, Вы просто гений!

Успешно получилось открыть бесценный диск. Вся информация успешно отобразилась. Радости нет предела!
Никогда бы не предположила, что буду так счастлива, увидев свои старые файлы. Забэкапила информацию. Последний вопрос: надёжно ли будет дальше использовать этот диск или вероятность рецидива высока?

Спасибо Вам огромное за всё, за потраченное на мою проблему время. Вы — мой спаситель!

P.S. с меня пиво!

117. SharkyEXE , 15.03.2010 22:42
Antech (http://forum.ixbt.com/users.cgi? >
1)

цитата (Antech): В любых (если есть нужное и незабэкапленное).

цитата (Antech): Поэтому что-то, естественно, повредилось (ведь все это великолепие было записано в пространство, принадлежавшее существующему второму разделу). Так что ФС поправлена чекдиском, но могут, например, быть повреждены некоторые файлы (какие конкретно — неизвестно, т.к. мы не знаем, куда была запись, она могла быть далеко не только в новый [смещенный] бутсектор).

Есть ли что-нибудь, что поможет найти эти поврежденные файлы, которые не будут читаться/открываться/с ними нельзя будет работать?
3) Насколько я понял, проблема с неотображением моего раздела Е в программах Партишен Мэджик и PTD — это трудности этих программ?

118. kadavra , 16.03.2010 00:20
Antech

MHDD начинает сканирование нормально, затем периодически появляются поля где через каждые 4-5 блоков лезет красный (более 500мс), затем появляется один UNC, снова поля с красными, а потом одно большое поле из ABRT, винт начинает противно гудеть, затем выдается CATASTROPHIC FAILURE cannot write log file, disk is full.

SMART выдает все значения кроме температуры выше или равные пороговым
не пойму какой буквой подцепляется второй (живой) хард, поэтому не могу слить лог

это полный пипец?

119. lexlunar , 16.03.2010 01:17
истроия — был внешний диск ровер внутри Toshiba MK1637gsx HDD2D60 на 160Gb 2,5 Sata. Все работало, но в один прекрасный момент спалил ноут этим внешним диском. Ноут починил, теперь занялся восстановлением инфы с харда. Но при подключении через Sata хард не видится ни OC ни BIOSoм. Подозреваю, что выгорел USB-интерфейс у коробки и спалил электронику у харда. Блины надеюсь целы и инфа на них.

вопрос — как мне восстановить инфу?

Думается, что нужен донор. Но этот винт уже история — такого сейчас не продают. Есть более свежие винты по 160 от Тошибы. Можно ли их использовать? Или какие еще варианты? Гуру поможите.

цитата: kadavra:
потом одно большое поле из ABRT, винт начинает противно гудеть, затем выдается CATASTROPHIC FAILURE cannot write log file, disk is full.

Что и требовалось доказать. Если нужна инфа с диска, то к специалистам, если не нужна — то в гарантию. Ну и, конечно, писать лог на больной тестируемый диск — это, как бы помягче выразиться, неразумно .

120. Leo , 16.03.2010 03:08
121. Antech , 16.03.2010 08:51
a.spb
надёжно ли будет дальше использовать этот диск или вероятность рецидива высока?
Если шлейф заменили и UDMA CRC Errors Raw в СМАРТе не растет, то вероятность именно рецидива очень мала. Ну а просто сдохнуть может любой винт по разным причинам, зато теперь у Вас бэкап есть.

SharkyEXE
А как тогда понять, можно ли вообще когда-нибудь давать команду ЧекДиск : /F?
Как обычно: вначале посмотреть, что говорит без /F, по возможности исправить, и запускать на исправление только если Вы уверены, что оставшиеся ошибки (их автоисправление) не приведут к проблемам.

которые не будут читаться/открываться/
Они будут читаться, поэтому я и не знаю, как их отлавливать (да и вообще сомнительно, что это возможно без контрольных сумм типа *.md5). Проблема ведь не в том, что не читаются, а в том, что часть содержимого изменена.

проблема с неотображением моего раздела Е в программах Партишен Мэджик и PTD — это трудности этих программ?
ИМХО да. Прога просто находит какую-нибудь мелочь или просто глючит и ведет себя так, как будто раздел вообще неисправен. Зато какие забавные приколы бывают, если дать Part Magic исправить таблицу разделов. Ну а PTD, насколько помню, Вы уже испытали .

Leo
писать лог на больной тестируемый диск
Не, ну лог писался на рэмдрайв, вероятно (Magic boot disk с MHDD), а второй винт исправен.

lexlunar
Похоже, вариант один — DR фирма.

А что с ноутом-то было?

122. s-notebook.com , 17.03.2010 15:00
SharkyEXE
такая же проблема, слетел основной раздел, удалось найти грамотный мануал по восстановлению раздела в HeX-редакторе? отпишите плиз если знаете что, на почту koyotaa гав mail т. ru
123. xsmart , 17.03.2010 22:23
Здравствуйте. У меня имеется внешний USB-винчестер WD5000ME-01 на 500 Гб. Сегодня утром произошел трагический глюк утилиты для форматирования флешки, которая вместо флешки начала форматировать винчестер. Форматирование было выбрано «быстрым». Спустя буквально секунду, поняв что происходит, нажал отмену форматирования. На винчестере было четыре раздела 20, 148, 148, 148. Сейчас виндой видится один раздел 466 Гб, при попытке открытия пишет «раздел не отформатирован». DMDE прекрасно находит все разделы и директории. Есть ли какой-то способ вернуть все «как было» ? Буду очень благодарен.
124. Antech , 18.03.2010 10:00
xsmart
DMDE прекрасно находит все разделы и директории
Покажите скрин окна с разделами.

Спустя буквально секунду, поняв что происходит, нажал отмену форматирования
Покажите дамп секторов 0. 9999 физического диска (заархивируйте, plz).

125. fotoparus , 18.03.2010 11:58
Накрылся настольный ПК. Купил ноутбук и сетевое хранилище Storage Nas-22 на два жестких, плюс еще жесткий на 1 Тб. Сетевое хранилище подключил сначала с новым одним диском на 1 Тб, отформатировал его через утилиту nas. Потом подключил хард от PC. До этого хард был на компе разбит на два логических диска: C и D. Сетевое хранилище увидело только D, да еще часть файлов и папок вообще не видит. Я так понимаю, что это проблема nas. Пытался подключить только один этот диск, без терабайтного, но в таком случае сетевое хранилище вообще предлагает его отформатировать, т.е. не видит. В связи с чем вопрос. Можно ли как-то счиать всю информацию (в том числе и с раздела С)? Возможно док-станция или внешний конетейнер, работающий через usb увидит диск полностью? Или же нужно непременно жесткий вставлять в PC?

Спасибо

126. mc-roma , 18.03.2010 18:40
пропал раздел с виндой. диск без бедов. копии 0 и бутсектора в файлеhttp://slil.ru/28817433
результат дмде внизу.

К сообщению приложены файлы: 1.jpg, 629×373, 37Кb

127. orkello , 18.03.2010 22:39
Увеличивал свободное пространство диска за счет другого с помощью Acronis Disk Director. в процессе произошла перезагрузка, именно во время переразбивки. На жестком были данные, теперь пишет: Файловой системы нет, Раздел 0х7 (NTFS, HPFS).

Возможно ли как-нибудь достать оттуда данные?

128. Antech , 19.03.2010 08:35
fotoparus
А почему Вы решили, что NAS будет работать с винтом как USB-переходник? NAS может использовать часть винта для своих нужд, может создавать массивы (это про подключение двух винтов), да и вообще может делать с винтами что угодно. У него же может быть внутри любая разметка и ФС: доступ все равно предоставляется по сети и внешняя ОС не обращается к диску напрямую.
Подключите через обычную USB-коробку или переходник, но будьте внимательны: у многих 3.5″ коробок плохие блоки питания, что небезопасно для винта. А хорошая коробочка и стоит дороже.

mc-roma
На скрине не видно, чтобы что-то пропало: два раздела, первый — первичный, второй — логический в расширенной области. У обоих разделов бутсекторы и их копии на месте.
Ну и сам термин «пропал раздел» очень неточен. Сорри, но под этим можно понимать что угодно. Plz уточните, в чем проблема.

orkello
Обычно в таких случаях советуют GetDataBack, R-Studio, RecoverMyFiles и т.п. Восстановится что-то или нет, и если да, то в каком количестве, — зависит от Вашего везения.

129. alviga , 19.03.2010 10:17
Добрый день !
Утром произошел сбой на жестком диск, не хочет грузится система. Подключил диск к другому компьютеру видится как неразмеченный.
Посмотрел через dmde данные видно. Можно ли вернуть диску работоспособность ?

Добавление от 19.03.2010 10:30:

вот что показывает мне dmde при открытии диска
[url=http://slil.ru/28818890]http://slil.ru/28818890

130. mc-roma , 19.03.2010 10:36
Antech
ввойти в раздел из под другого виндовса невозможно. загрузка не производиться с него. чекдиск пишет что не может продолжить сканирование из-за ошибки. р-студио видит все данные на первом разделе. второй без проблем вообще.
131. orkello , 19.03.2010 10:46
пробую через R-Studio, после сканирования много разделов Recognized. приходится каждый просматривать.

С помощью GetDataBack объясните, плз, пошагово, как делать.

132. Antech , 19.03.2010 13:24
mc-roma
В PT и BS по первому разделу нет очевидных проблем. Обычный первый Primary NTFS с умолчальным кластером 4 КиБ, отформатированный WinXP. Похоже, что начало MFT того на этого.
Покажите 100 секторов физического, начиная с 6291519 (MFT).

orkello
С помощью GetDataBack
Я не знаю, я же этим не пользуюсь. Хэлп почитайте. Да там вроде и визард есть: несколько кнопок нажмете и оно начнет сканировать.

alviga
Да уж, в MBS мусор, зато в области до первого раздела есть целых несколько копий MBS, которые, вероятно, в разные времена были на винте.
Вернуть MBS не сложно, но Вы сообщите вначале, сколько было разделов и какого размера (непосредственно перед глюком). И вообще, какого размера хоть винт-то?
Покажите SMART из HDDScan или Victoria API.

133. alviga , 19.03.2010 14:30
Диск 64 Гб, раздел был на весь диск. что то в районе 59 гб. Диск был создан программой acronis easy migrate исходным был диск 40гб. Других партиций на нем не было, может только если acronis что-то сделал. смарт ничего не показывает диск ssd ((
134. mc-roma , 19.03.2010 14:36
Antech
Покажите 100 секторов физического, начиная с 6291519 (MFT).
http://slil.ru/28820220 — вот смотрите.

r-studio показывает такое ругание Warning File system [File >

135. alviga , 19.03.2010 14:38
когда я выбираю одну из партиций которые показывает dmde (noname25) файлы и структуру каталогов я вижу, правда восстановить пока не пробовал (
136. Antech , 19.03.2010 18:13
alviga
Диск 64 Гб, раздел был на весь диск
Я так и подумал, но размер несколько необычный.

Диск был создан программой acronis easy migrate
Оно и видно: MFT начинается в кластере 2. Первый же катаклизм в начале раздела вынесет первый фрагмент MFT, а он у Вас достаточно большой. Ну ладно, это лирика.

Запишите это (http://sderni.ru/79769) в сектор 0 и перезагрузитесь (DMDE — физический — заполнить секторы — файл; первый сектор 0, число секторов 1). Проверьте доступность раздела.

mc-roma
Сейчас slil/zalil.ru не работает, попробуем позднее.

137. mc-roma , 19.03.2010 19:29
Antech
http://sderni.ru/79780 залил тоже самое сюда
138. alviga , 19.03.2010 20:21
Antech
Проверьте доступность раздела.

спасибо раздел стал доступен. все работает.
но что делать в будущем, если опять такой сбой. Можно ли как-то избавиться от наследства acrononisa ?
или всегда держать на готове Ваше лекарство ?

[От куратора: цитировать полностью не нужно.]

цитата: Antech:
Покажите скрин окна с разделами.
Покажите дамп секторов 0. 9999 физического диска (заархивируйте, plz).

Воть http://slil.ru/28820845
откуда взялся последний (Vol 4) раздел, я не в курсе

139. xsmart , 19.03.2010 23:09
140. s.v.korobkov , 20.03.2010 12:01
Здравствуйте. Возникла такая проблема. У меня террабайтный хард WD10EACS. В один прекрасный момент на нем появились BAD-сектора. В системе он стал видется как один раздел 128гб и все остальное место винда определяет как незаполненное. При попытке восстановить информацию программой getdataback for ntfs сканирование идет прекрасно до определенного момента а именно до сектора с номером 1115654000,а затем появляется ошибка Error 1117 in hd129 uring readLBA. (такая как писал народ выше). Если нажать Yes to all программа продолжает сканирование но уже не пытается прочитать следующие сектора а тупо их пропускает. В итоге большенство крупных файлов остаются битыми и при попытке дальнейшего копирования выдается очредная ошибка говорящая о невозможности копирования битого файла. Что можно сделать в этом случае?

Заранее спасибо!

141. Ahai , 20.03.2010 12:47
s.v.korobkov
идет прекрасно до определенного момента а именно до сектора с номером 1115654000,а затем появляется ошибка Error 1117

До прогона рекаверилок, очень желательно прогнать Scan/read — Remap в MHDD или Victoria, иначе они все время будут спотыкаться на бэдах.

142. s.v.korobkov , 20.03.2010 12:54
А для того чтобы прогнать в них что надо сделать? Можно эти проги из под винды запустить? И будет ли виден в них сата хард подключенный через контроллер PCI?

цитата: s.v.korobkov:
А для того чтобы прогнать в них что надо сделать?

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

143. Leo , 20.03.2010 21:38
144. s.v.korobkov , 20.03.2010 22:29
[q]Leo

Я прогнал сканом. На сбойном секторе появилась ошибка и сканирование прервалось. Незнаю правильно ли я сделал но я затер сектора с 1115654000 по 1115670000 и теперь getdataback работает без ошибок.. как думаете.. много ли я данных потеряю?

145. Antech , 20.03.2010 23:48
mc-roma
Испорчено начало MFT, это и так было понятно. В данном случае накрыло хвост $MFT (конец второго сектора, там ничего ценного нет, но там контрольный элемент USA) и 4 следующих записи: $MFTMirr, $Logfile, $Volume.
Патч MFT (http://sderni.ru/80008) . DMDE, физический, заполнить секторы, файл, первый сектор 6291519, число секторов 8.

alviga
Можно ли как-то избавиться от наследства acrononisa ?
Да можно не избавляться. Но если очень хочется, то копирование + формат раздела (diskmgmt.msc) + копирование обратно. Но если это системный раздел с Vista и старше, то так не получится, оставьте как есть.

что делать в будущем, если опять такой сбой
Если именно такой, то достаточно записать патч еще раз.
А чтобы уменьшить вероятность рецидива, неплохо бы проверить железо: блок питания, память, кондеры на материнке, на всякий случай даже SMART винта. И не использовать потенциально глючный софт для прямой работы с логической стуктурой накопителей инфы. Но это уже несколько оффтопично. Конкретную причину я не знаю (MBS был переписан посторонними значениями, но я не знаю, из-за чего это произошло).

xsmart
В MBR один раздел на весь диск. В секторе 63, где когда-то начинался первый раздел, нули. Далее нетронутое начало раздела.
Патч MBR (http://sderni.ru/80015) . DMDE — физический — сервис — заполнить секторы — файл. Первый сектор 0, число секторов 1. После перезагрузки разделы вернутся, а вот будут ли они открываться, это Вы посмотрите. Но первый точно не будет, т.к. у него в бутсекторе нули. Давайте посмотрим дамп сектора 40805099, там должна быть копия (лучше даже 100 секторов, начиная с 40805050 — там будет хвост первого и начало второго раздела, для определенности).

s.v.korobkov
много ли я данных потеряю?
Максимум 8 192 512 байта. А зачем стерли?

146. xsmart , 21.03.2010 14:59
Antech
Огромное спасибо! Я впечатлен. Последние три раздела восстановились и нормально открываются. А первый, как вы и сказали, не открывается. Дамп прилагаю. http://slil.ru/28827176
147. Antech , 21.03.2010 23:19
xsmart
С первым разделом не повезло. Копии бутсектора в последнем секторе раздела нет. Видать, не Виндой его форматили, а third-party могут и не записывать копии BS в последнии сектор. Или новое глючное форматирование затерло копию.
В первых 10000 секторов MFT не наблюдается. Покажите 100 секторов физического, начиная с 6291519. Хотя, если там в начале не будет строки «FILE», можете сразу начинать Поиск NTFS в DMDE (в качестве области поиска задайте только первый раздел). Если увидите FILE0 в начале 6291519, то поиск не нужен пока что.
148. xsmart , 21.03.2010 23:43
Он там по ходу. Я мало что понимаю, как мне кажется , но с сектора 6291519 он и начинается. http://slil.ru/28830421
149. Antech , 22.03.2010 08:53
xsmart
Оно там, но это скрин, а не дамп. Я просил дамп, чтобы в случае обнаружения MFT определить MFT Mirror start cluster и размер кластера (хотя 99.(9) % что 8 секторов).
150. Caerus , 22.03.2010 09:34
здравствуйте. по непонятным причинам жесткий стал динамическим. на вашем форуме нашел тему где писалось что его нужно изменить в базовый при помощи программы winhex. сделал все как было описано, диск начал отображаться в системе но только одним разделом помогите пожалуйста найти второй раздел
я вот у вас создал тему Помогите разобраться с жестким диском (http://forum.ixbt.com/topic.cgi? >и если правильно все понял то вот скрин
(http://radikal.ru/F/s16.radikal.ru/i191/1003/e0/ff24e322290b.jpg.html)
151. Mefistophel , 22.03.2010 09:52
Добрый день!
Упал диск на 500GB, из под винды виден как RAW-диск с нулевым размером, нулевым занятым местом и нулевым свободным местом. Из под DOS виден как NTFS-диск правильного размера, но не присваивается буква, обозначен как «?»-диск. Через DiskEdit получено следующее: левая таблица (http://radikal.ru/F/s54.radikal.ru/i145/1003/dc/c47ab5f47cbf.jpg.html) , правая таблица (http://radikal.ru/F/s45.radikal.ru/i107/1003/1f/76c4bd2a0001.jpg.html) , текстовка (http://radikal.ru/F/s005.radikal.ru/i211/1003/27/92c9243c771c.jpg.html) ,
текст в нижней части экрана:
HPFS/NTFS YES 0 1 1 4095 62 63 63 976768002
available NO 0 0 0 0 0 0 0 0
available NO 0 0 0 0 0 0 0 0
available NO 0 0 0 0 0 0 0 0
Программа HD Tune Pro выдала следующее (http://radikal.ru/F/s50.radikal.ru/i127/1003/43/8d8076abdefe.jpg.html)
Как я понял, слетела таблица. Как вернуть к жизни, не потеряв данные (более 400 гектар)?
ПС. Свободного диска нет.

152. Antech , 22.03.2010 12:55
Caerus
Сорри, забыл сказать. Отметьте галочку «Найденные» и повторите скрин, plz.

Mefistophel
Как я понял, слетела таблица
Нет, таблица (разделов) в норме, насколько можно видеть из этих кусочных скринов.

Программа HD Tune Pro выдала следующее
Жалуется на интерфейсные ошибки. Замените шлейф и покажите дампы физического по 100 секторов, начиная с 63 и 6291519.

153. Mefistophel , 22.03.2010 16:29
Замените шлейф и покажите дампы физического по 100 секторов, начиная с 63 и 6291519.
Шлейф заменил (забыл сказать, диск SATA). Вот дамп (http://dump.ru/file/4465466)
154. Antech , 22.03.2010 18:22
Mefistophel
MFT (http://slil.ru/28834388) . DMDE — физический — сервис — заполнить секторы — файл. Первый сектор 95, число секторов 8. Перезагрузитесь и проверьте, открывается ли раздел. В любом случае пустите в cmd.exe chkdsk.exe БукваРаздела: без доп-параметров и покажите результат.
155. xsmart , 22.03.2010 20:30
Antech:
Понял.. извиняюсь.
Вот дамп (http://slil.ru/28835320) , который вы просили.
156. Caerus , 22.03.2010 22:36
Antech
та ничего страшного, готов скринить все что угодно и сколько угодно
(http://radikal.ru/F/s57.radikal.ru/i158/1003/9c/9e23d5f424db.jpg.html)
157. Antech , 22.03.2010 22:40
xsmart
BS-1 (http://sderni.ru/80385) . DMDE — физический — заполнить секторы — файл. Первый сектор 63, число секторов 1 (как обычно, в общем). Потом перезагрузитесь и посмотрите, доступен ли первый раздел. Если нет, то Чекдиск без доп-параметров на него и сообщите, что он говорит.

Caerus
MBR (http://slil.ru/28836480) . Записываете аналогично xsmart, только первый сектор 0, не ошибитесь. Потом надо перезагрузиться.

158. xsmart , 22.03.2010 23:26
Antech
Все отлично! Еще раз огромное спасибо. С меня пиво
159. Mefistophel , 22.03.2010 23:40
2: Antech
Доступ к диску получен, проведена выборочная проверка, вроде все без косяков.
Вот отчет chkdsk —

К сообщению приложены файлы: 1.jpg, 656×526, 55Кb

160. Caerus , 23.03.2010 00:51
Antech
все работает отлично, большое человеческое спасибо
161. Antech , 23.03.2010 08:42
Mefistophel
Все нормально. Можете дать Чекдиску исправить (/f) эту мелкую фигню с битмэпом.
162. Mefistophel , 23.03.2010 14:46
Antech
Спасибо огромное за помощь! Даже не знаю, как благодарить вас.
Не можете поделится знаниями и опытом по поиску и устранению подобных ошибок?
163. aka_smile , 23.03.2010 15:31
украли комп
через милицию вернул
но разделы были чисты и стояла винда.
поэтому неизвестно что делали, что удаляли, и как создавали, форматировали.
единственное что было в моих силах
просканировать
— r-stduio undelete
— get data back for ntfs
кое что смог поднять, но осталась ещё папка, которую эти программы не видят, но (внимание!) видит Recuva, но размер файлов в recuva и размер восстановленных файлов отличается (востановленные в разы меньше), речь идет о jpg, если это имеет значение. При попытке просмотреть эти жпг: пустая пикча, причем это так говорит FastStone, стандартный виндовозный просмотрщик вообще ругается на файл.
Статус файлов этих в рекуве: «отличный» и примечание «перезаписанные кластеры не обнаружены»

так вот подскажите какой то способ поднять файлы в оригинальном состоянии

164. Antech , 23.03.2010 18:18
aka_smile
Может, попробовать еще какие недеструктивные рекаверилки? Restorer-2000, RecoverMyFiles.
По тому, что Recuva что-то находит, я не могу ничего сказать. Она кроме «отличный» технические детали сообщает? Ну там начальный сектор файловой записи данного файла or something?
165. Dimonssss , 23.03.2010 18:47
1. Samsung HD321KJ ATA Device
2. Vista SP2
3.1. Был одним разделом
3.2. NTFS
4. Просто, сидел лазил в инете, потом хотел вызвать Process Explorer через Win+R, он не хотел реагировать, начал подвисать комп, я его перезпустил кнопкой. Проходило нормально, но с торможением.
Зашел в Мой компьютер и мне он начал выдавать: «Нет доступа к Е:\. Структура диска повреждена. Чтение невозможно»
Сейчас отображается как RAW.

Восстановить нужно весь диск, очень много важныой информации, свободно было вроде 40-50Гб.

Вот что выдал HDDScan:
(http://radikal.ru/F/s44.radikal.ru/i103/1003/c8/0773dbc8c237.jpg.html)

166. Antech , 23.03.2010 22:35
Dimonssss
Интерфейсных полно — меняйте шлейф; проверьте, что частоты штатные. И следите, чтобы UDMA CRC Errors Raw не росло!

Покажите дампы по 100 секторов, начиная с секторов 0 и 6291456 от начала раздела (не диска, а раздела).

167. aka_smile , 23.03.2010 23:42
Antech
неа, там столбцов то. и никаких 0х. данных нигде не кажет

а среди деструктивных топовые хоть ещё назовите какие то, кроме тех, что сказали

цитата: aka_smile:
а среди деструктивных топовые хоть ещё назовите

Среди деструктивных топовых нет. Ну разве что Testdisk’ом можно пользоваться в некоторых случаях (в Вашем не поможет). А от всего остального только вред один.

168. Leo , 24.03.2010 03:06
169. Dimonssss , 24.03.2010 08:35
Antech
Шлейф уже менял.
Вот дамп (http://musiczp.at.ua/secrtors.rar)
170. Antech , 24.03.2010 09:00
aka_smile
А толку-то с деструктивных.

Поиск NTFS в DMDE сделайте на всякий случай.

Dimonssss
Упс. Первые 3 записи MFT переписаны мусором. Соответственно, ранлиста MFT нет, а это проблема.
Покажите 10 секторов, начиная с 312560608 от начала раздела (MFT Mirror).
Сделайте Поиск NTFS в DMDE. Область — лучше задать раздел. Покажите скрин результатов, но не забудьте также сохранить лог, он может понадобится. По результатам можно будет определить, что там было с фрагментами MFT.

171. Dimonssss , 24.03.2010 16:05
Antech

Секторы которые просили
тут (http://musiczp.at.ua/sec_312560608_10.img)
А если сделать копию этого диска на другой жесткий диск, можно будет из той копии что то вытащить?

172. Antech , 24.03.2010 18:12
Dimonssss
В MFT Mirror аналогичная фигня, как обычно (это видно на скрине поиска, а дамп я Вас не с того сектора попросил снять, т.к. не знал начального сектора раздела, а предположение мое оказалось неверным, т.к. раздел один, но почему-то extended/logical).

Патч MFT (http://sderni.ru/80654) . DMDE — физический диск — сервис — заполнить секторы — файл. Первый сектор 6307584, число секторов 8. После перезагрузки смотрите, что с разделом. Патч испытан на тестовом разделе и проблем не обнаружено, но у Вас могут оказаться вафли и в других местах, например в корне.

173. Dimonssss , 24.03.2010 21:41
Antech
Спасибо Вам большое. Диск стал доступным, вроде бы без проблем.
174. pautina , 25.03.2010 08:06
Всем добрый день. Такая вот проблема случилась. Ноутбук, Сони Вайо, Виста Хом Прем, чуть не уронили при этом закрыв экран и сильно треханув ноут, после чего ОС грузится перестала, после нескольких попыток восстановления системы и попытки загрузится в безопастном режиме. случилось то. что слетели разделы, т.е. партишн магик 8 показывает единственный раздел жёлтого цвета с ошибкой 105. Желательно восстановить полностью разделы и данными, т.к. там ещё и лиц ОС в скрытом была. Акронис видит разделы и данные (но им пока ничего не делали и можно ли что-то сделать пока не в курсе.)
Вопрос: С чего начать и как восстановить разделы с данными?
Если это не возможно нужно спасти тогда хотя бы данные.
175. vadis_on , 25.03.2010 10:19
У меня проблема следующего рода: комп не вышел из спящего режима и был перезагружен, после чего не загрузился. В компе 3 винта и путем поочередного отключения было выяснено, что не загружается когда подключен один из них Seagate barracuda 750Gb sata-2, а точнее проходит тест памяти, птотм пишет detecting IDE долго долго ждет и в результате не находит его. На винте система и много нужных данных, помогите плиз в чем может быть проблема.
176. Antech , 25.03.2010 13:24
pautina
С чего начать
Покажите SMART.
Винт без нужды не держите включенным.

vadis_on
Отключите винт в БИОСе, загрузитесь с Magic Boot Disk и посмотрите, виден ли винт в MHDD.
Винт 7200.11? Почитайте на тему Мухи ЦЦ (здесь в теме про 7200.11 и ES2), скорее всего у Вас именно это. В той теме найдете и как лечить.

177. Adminprio , 25.03.2010 14:35
Случайно форматнулся винт с 4 разделами,на которых была XP, server 2003 ,запасной контроллер Domena.
Покывырялся с Таблицей раздела диков, вроде все вернул. Содержимое разделов видно,
но вот при загрузке с любого толком ничего не выходит.
Вроде начинает грузится, а потом в перезагрух уходит..
На AD говорит нарушена секретность.
Получается,как таблица разделов связана с возможностью загрузки систем?
что посмотреть и можно сделать?
178. Antech , 25.03.2010 18:03
Adminprio
при загрузке с любого толком ничего не выходит
Если кроме поста и черного экрана ничего. Попробуйте FIXMBR и FIXBOOT в Консоли восстановления (если XP) или «восстановление загрузки» (если Vista/7).
Если появляется логотип Винды. Проверьте наличие загрузочных файлов в корне (ntldr, ntdetect.com, bootfont.bin для XP).

А причем тут DR?

179. Adminprio , 26.03.2010 09:29
да как раз странно XP стоит в первом разделе грузится нормально,
загрузочные файлы они общие для всего диска!

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

180. Roacher , 27.03.2010 22:08
Началось все с того, что я месяца 4 назад сносил HDD к другу и тот стал работать значительно хреновее. Не сразу определялся при подключении к чужой машине, копирование происходило медленно и рывками, вся система начинала тормозить, переодически издавался звук, как при включении, курсор мыши при копировании порой зависал, хотя мышь продолжала работать и приходилось тыкать ей вслепую, весь виндоус стал грузиться при включенном HDD раза в 2 медленнее. Поскольку на нем хранились только медиафайлы неудобства это доставляло редко.

Теперь же я переустановил виндоус и он видит HDD как 80гб неразмеченной области, хотя буквально 5 минут назад до начала установки все было впорядке. В диспетчере устройств винт отображается и говорит о том, что работает нормально. При запуске компа биос тоже видит. Модель: samsung sp0842n

Что мне делать, чтобы вернуть диск к жизни и не потерять данные?

SAMSUNG SP0842N-S0DWJ30L473908-SMART.mht
HDDScan S.M.A.R.T. Report
Model: SAMSUNG SP0842N
Firmware: BH100-35
Serial: S0DWJ30L473908
LBA: 156301488

Report By: HDDScan for Windows version 3.2
Report Date: 27.03.2010 20:08:45

Num Attribute Name Value Worst Raw(hex) Threshold

001Raw Read Error Rate 25310000000000-0000051


003Spin Up Time 10010000000000-1000025

004Start/Stop Count 10010000000000-02AC000

005Reallocation Sector Count 25325300000000-0000010

007Seek Error Rate 25325300000000-0000051

008Seek time Perfomance 25325300000000-0000015

009PowerOn Hours Count 10010000000000-124D000

010Spin Retry Count 25325300000000-0000051

011Recalibration Retries 25325300000000-0000000

012Device Power Cycle Count 10010000000000-0162000

187Reported Uncorrectable Error 08708700000000-000E000

190Airflow Temperature 09706447 C 045

194HDA Temperature 09706447 C 000

195Hardware ECC Recovered 25310000000000-0000000

196Reallocation Event Count 25325300000000-0000000

197Current Pending Sector Count 10010000000000-0001000

198Uncorrectable Sector Count 25325300000000-0000000

199UltraDMA CRC Errors 20020000000000-0000000

200Write Error Rate 25310000000000-0000000

201Soft Read Error Rate 25310000000000-0000000

181. Antech , 27.03.2010 23:29
Roacher
Насколько можно понять из SMART’а, начисто лишенного пробелов между цифрами, на винте есть один унк, но других проблем не видно. Это PATA винт и проблемы начались после подключения к другому компу. Проверьте ножку DMARQ в интерфейсном разъеме (напротив ключа), возможно она вдавлена или отпаялась, иногда такое бывает. И еще, посмотрите в Диспетчере Устройств режим передачи для проблемного винта (UDMA или PIO). Т.к. винт старый, можно также снять плату и почистить контакты разъема плата-гермоблок (хотя у меня на SV0602H этот разъем сделан капитально, не то что в современных, а у Вас Самс тех же времен). После этого, так или иначе, просканируйте в HDDScan или Victoria или MHDD (но остановите скан, если будет много проблемных блоков).

Что мне делать, чтобы вернуть диск к жизни и не потерять данные?
Как говорят в Китае: Сунь-хунь-в-чань. Вынь-су-хим.
И то и другое одновременно может оказаться невозможным. Неизвестно еще что с винтом. После профилактики (см. выше) снимите и покажите дамп секторов 0-99 физического (см. шапку).

Добавление от 27.03.2010 23:33:

Mefistophel
Не можете поделится знаниями и опытом по поиску и устранению подобных ошибок?
Ну, это довольно проблематично по времени, да и явно выходит за рамки темы. К тому же опыт-то у меня не ахти, я же не проф-DR. Если Вам интересно, почитайте мануалы по таблице разделов и ФС. Будут вопросы — спрашивайте. Некоторые источники есть в шапке.

182. Ahai , 27.03.2010 23:39
Antech
из SMART’а, начисто лишенного пробелов между цифрами

14 UNC и 1 пендинг.

183. Roacher , 28.03.2010 00:14
Antech

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

184. Ahai , 28.03.2010 17:11
Roacher
DMARQ меньше других по размеру и утоплена наполовину.

21-й пин имеет стандартный размер и высоту.
Делайте выводы.

185. stalker18 , 28.03.2010 17:51
1. SAMSUNG SP0802N 80Gb
2. WinXP SP2
3. На винте три диска первый Primary (D: 6 Gb) и два логических в Extended (G: и H: по 35 Gb). У всех NTFS.
4. Винт не основной, используется для хранения инфы. Во время загрузки игры комп ушел в ребут, потом еще раз, потом я заметил, что при попытке зайти на диск стало появляться сообщение: «Нет доступа к D:\ Файл или папка повреждены. Чтение невозможно». Такое сообщение выводится при попытке зайти на любой из трех дисков. Тестировал с помощью mhdd — bad секторов не обнаружено.
5. Результаты SMART в приложении.
6. Хочется восстановить без копирования на другой винт.
7. Приложил дампы с 0 сектора диска 100 секторов, и с 63 (boot sector) — тоже 100.
Sectors-100@0.img (http://slil.ru/28868054)
Sectors-100@63.img (http://slil.ru/28868062)

Прошу помочь в решении проблемы)

К сообщению приложены файлы: 1.png, 761×705, 94Кb, 2.png, 632×378, 27Кb

186. Ahai , 28.03.2010 17:59
stalker18
Результаты SMART в приложении.

У него там 362 интерфейсных ошибки.
IDE-шлейф ему замените первым делом и разгон снимите (если в наличии).

цитата: Ahai:
У него там 362 интерфейсных ошибки.
IDE-шлейф ему замените первым делом и разгон снимите (если в наличии).

Нет, дело не в этом (не помогло).

187. stalker18 , 28.03.2010 18:26
188. Ahai , 28.03.2010 19:45
stalker18
Нет, дело не в этом (не помогло).

Конечно не помогло. Дело сейчас уже не в этом, а причина — скорее всего в этом и устранить ее надо до дальнейших действий.

189. Antech , 28.03.2010 23:34
Roacher
Было или не было, выправляйте этот пин, причина наверняка в нем.

Ahai
14 UNC
Uncorrectable Sector Count 25325300000000-0000000
А где?

stalker18
Подозрение на испорченное начало MFT на всех недоступных разделах (из-за интерфейсных ошибок). Я так понял, шлйф заменили. Покажите 100 секторов физического, начиная с 2097215 (начало MFT первого раздела) и по 100 начальных секторов 2 и 3 разделов. Можно также по 100 секторов, начиная с 6291456 2 и 3 разделов.

190. Ahai , 28.03.2010 23:39
Antech
А где?

Вот, всего:
187 Reported Uncorrectable Error 087 087 00000000-000E 000

P.S. Пробелы мои.

191. Elion , 29.03.2010 04:45
Antech
Спасите-помогите пожалуйста!

Проблема много раз обсуждалась, но решения подходящего так и не нашел (
Суть — после установки системы на новый компьютер и подключения старого харда, система перестала виедеть hdd. Пишет, что он динмаческий, хотя я его абсолютно точно таковым не делал.
Сандартным методом (в управлении дисками, по правой клавише и далее. ) не получается — выдает ошибку (Внутренняя ошибка — Дисковая группа не имеет допустимых копий конфигурации (C10000B6). и Неопознанная ошибка (80004005).)
В DMDE менял секор 42 на 07 — бесперспективно. Отобразился один логический диск (SWOP), на котором у меня ничего, кроме старого свопа нет.
Подключить-преобразовать в основной на старом компьютере возможности больше нет и не предвидется.
Разумеется, ка всегда в таких случаях бывает — на харде очень много НУЖНОЙ информации по работе, которую потерять просто нельзя.
Вопрос — можно ли без копирования данных на другой диск вернуть в мир этот?
Данные:
Диск: WesternDigital
Модель: wd2500aajb
Система ДО: WinXPProfessional SP3
Система сейчас: WinXPProfessional SP2, большие диски поддерживает
Общий объем: 250Гб
Количество логических: 6
Файловая система: NTFS.
На других компах — то же «динамический и блаблабла. «
Рекавером смотрел — все файлы на месте, целы
Ссылка на скрин: http://iscr.ru/1269822649/

Добавление от 29.03.2010 04:53:

UPD
Если нужен дамп — напишите, пожалуйста, как его снять.

192. Roacher , 29.03.2010 11:41
Antech
Было или не было, выправляйте этот пин, причина наверняка в нем.

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

Насколько вообще безопасно снять схему с корпуса, чтобы глянуть на пин с обратной стороны?

193. Antech , 29.03.2010 13:41
Ahai
А, понял. Это (AFAIR) общее количество чтений бэдов, не важно одного или нескольких. Т.е. можно почитать один бэд 1000 раз и этот атрибут должен быть 1000. Поэтому я не стал акцентироваться на этих 0E.

Elion
Количество логических: 6
Ну все, in-place Вы их больше не увидите. Выберите любые 4 или восстанавливайте через рекаверилки на другой винт.

он динмаческий, хотя я его абсолютно точно таковым не делал
Тем не менее, разделы изначально были «динамическими». Их 6 и промежутков нет («сектор в сектор»). При MBR-style разметке такое невозможно, и при преобразовании из MBR-style — тоже.

Если нужен дамп — напишите, пожалуйста, как его снять
Дамп не нужен, но как снять — есть в шапке.

Roacher
он не вышел, зато во все остальные стороны начал ходить замечательно
Наверное, он просто отломался. Нужно впаять новый, естественно он должен торчать на полную высоту, как и все остальные пины.

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

194. xxxfakaxxx , 29.03.2010 21:11
Мать ASUS P5K
Проц Intel C2D E8500 3.16 Ghz
Видео карта GeForce GTX 280
3х 1024 мб Kingston
Винт Seagate Barracuda 7200.11 500GB (Лечил от ЦэЦэ)
Windows 7 Ultimate x86
Корпус Ascot Premium Edition с БП в районе 800в (точно не помню)
__________________________________________________________
Нужно было разбить диск. Качнул РМ поставил. Во время установки зависание на секунду, БСОД, какой-то отсчет в течение 3-ех секунд и комп на ребут. «Бсод как бсод»- подумал я. Теперь система не заводится, как только проходит загрузочный экран-бсод и опять ребут.
Тут включается виндовсовская «Восстановление Запуска» и начинает лечить комп. В конце выдает что ей этого не получилось сделать. Смотрю журнал, везде вроде все как норм, но в конце вот что:
_________________________________________

Повреждена конфигурация загрузки.

Исправление: Восстановление таблицы раздела
Результат: Ошибка. Код ошибки = 0х490
Затраченное время = 327 мсек
_________________________________________

Предлагает отправить ин-фу в Майкрософт.
Я шокед!
Смотрю сервисы, которые тут есть
Восстановление запуска (Все идет по кругу, см. выше)
Восстановление системы (Выдает «Синтаксическая ошибка в имен и файла, папки или метки тома. Код ошибки 0x8007007B)
Восстановление компьютера из образа (Внут. ошибка. След. ин-фа возможно поможет устранить ошибку 0x80070002)
Диагностика памяти Windows (Ничего не дало)
И командная строка (к сожалеиню не знаю никаких команд, которые мне могут помочь)

Нашел на забугорном форуме что-то в духе мануала как лечить. Нашел образ винды, сделал бут флешку, но компом не видится (В юсб ус-вах есть, а среди вариантов бута нет, однако через АСУСовскую тулзу открыл бут меню, но после выбора флехи выдало мне «Бут фейлд»)
Нашел старый дисочек еще с РС1 В7, решил сначала ее поставить поверх старой, чтоб хотябы работало, а там уж и норм версию поставлю. Диск долго думал, в рез-те загрузился. Тут я вспомнил тот забугорный ФАК, и нажал на «Repair System» (или как-то так, не помню). Высветилось до боли знакомое мной меню, которое я описывал несколько абзацев назад. Вернулся в меню установки ОСи, жму установить, выбрал х86. Варианты естесна «Обновить» и «Поставить как новую». Файлы нужны, жму обновить. Тут он думает и выдает мне что типа: «делай ребут компа и открывай под виндой». Но винда-то не пашет. Решил пожертвовать 30-ю гигами ин-фы и залить на один из разделов, жму на обычную установку. Но в списке выборов раздела нету ничего, кроме созданного 100мб-тного системного раздела установщика. Открыл cmd, сделал чек диск С, он все выдал, но в конце он ссылался на ошибку 50.

Добавление от 29.03.2010 21:13:

Забыл дописать
NTFS, 2 лог. диска по 250 гб.

195. stalker18 , 29.03.2010 22:19
Antech
MFT 1го раздела Sectors-100@2097215.img (http://slil.ru/28876291)
Начало 2го раздела Sectors-100@12514698.img (http://slil.ru/28876305)
MFT 2го раздела Sectors-100@18806154.img (http://slil.ru/28876311)
Начало 3го раздела Sectors-100@84437703.img (http://slil.ru/28876316)
MFT 3го раздела Sectors-100@90729159.img (http://slil.ru/28876320)
196. HardCorp , 29.03.2010 22:39
Как-то тоже являлся клиентом этой темы, Antech помог, за что ему преогромнейшее спасибо. Вкратце опишу ситуацию, может, кому и будет интересно.
Был винт большого объема, перестал читаться(винда тормозила при подключении его к компу, сам он не открывался). Появились ли проблемы из-за того, что носил его(но делал это аккуратно), или просто он сам по себе-теперь уж не узнать. Главное в таких ситуациях-не паниковать. Сходил в DR-фирму. Заломили 9000. Подумал, и решил спросить совета в этой теме. Т.к. оказалось, что проблема с пластинами(пендинги и реаллокэйты плодились после каждого подключения), единственным выходом была покупка другого винта, чтобы сделать посекторную копию старого. Но не всё так просто В используемой для посекторной копии винде, стоял идиотский драйвер nvidia для хардов, который на 90% копировании винта просто выдавал синий экран. Тоже самое было и с Hiren`s BootCD. Драйвер удалил, поставил стандартный микрософтовский, скопировал, всё прошло удачно. Конечно, некоторые сектора не скопировались(причём, их количество увеличивалось с каждый попыткой копии, и драйвер оказывал медвежью услугу), а жаль. WinHex выдал отчёт по нескопированным секторам. С учётом того, что там могли быть важные данные, пришлось вручную просматривать каждый сектор, чтоб узнать, какой файл там находился. Учитывая, что секторов была куча, заняло это весьма продолжительное время. Но приключения не заканчиваются Просканировав копию винта в R-Studio, попробовал восстановить каталоги-ок, восстановились. На других же каталогах, R-Studio НАМЕРТВО висла с активным значком «STOP», не реагируя ни на что. Естественно, попробовал ещё пару раз отсканить копию-тот же результат. В общем, выручила только прога GetDataback for NTFS. Она корректно восстановила все каталоги, с которыми не справилась R-Studio. Но, некоторые файлы при посекторном копировании старого харда побились, обидно, что же делать? Попробовал скопировать WinHex`ом поврежденные сектора, но он делает только одну попытку чтения, после чего выдаёт ошибку. Вспомнил, что, может, как и на чтении проблемных CD-ROM`ов, попробовать несколько раз читать битый сектор? Спросил тут очередной совет, как лучше это сделать, Antech посоветовал прогу DMDE, но написал, что это почти бесполезно. Т.к. на старый хард было уже наплевать, решил его помучить. Долго сиё было. В общем, благодаря тому, что DMDE делает до 99 попыток чтения сектора, и только потом выдаёт ошибку(опять же, можно ещё 99 повторов сделать, и так до бесконечности), заставлял хард снова и снова читать проблемные сектора. Конечный результат таков: некоторые, мне нужные(в частности, единичные, а не те, что шли группами) сектора прочитались, т.о. записав их в WinHex на место «UNREADABLESECTOR» получил намного больше восстановленных данных. Конечно, на 100% все файлы не вернул, но большинство, нужное мне, восстановил
В общем, куча всяких нюансов при восстановлении, но главное — не сдаваться Для таких же людей, как и я, раньше; СДЕЛАВ ВЫВОДЫ ИЗ СВОИХ ОШИБОК, решил написать инструкцию, чтоб они поменьше загружали Antech(надеюсь, не будет против?), и вообще, эту тему. Может, полезно будет кому-то:

50$) можно купить винт 2.5 для этих целей и сделать там бэкап. Всегда помните, что тот, кто предупрежден-вооружен. Также, при прочих равных, и отсутствии человеческого фактора, винты 2.5″ надежнее 3.5″, а SSD надежнее их обоих. Потратить немного денег на бэкап, или потом выть при потере данных-решать вам.
6. Если вы всё же потеряли данные:
а) Никуда не лезьте, винт не трогайте, лучшим вариантом будет вообще выключить «пострадавшего» из компьютера, и, до описания проблемы с ним, и получения консультации по нему, не трогать «больного».
б) Если очень трясётесь за свои данные-обратитесь к специалистам, в DataRecovery фирму, но цены вас неожиданно удивят. Чтобы не удивляли-внимательно изучите пункт 5.
в) Хорошо, если имеется второй винт такого же объема, или большего-в крайнем случае, изыщите возможность для этого.
г) Перед проведением каких-либо операций с «больным» винтом никогда(без разрешения здешних спецов) НЕ запускайте chkdsk(чекдиск), убедитесь, что в винде у вас УСТАНОВЛЕН СТАНДАРТНЫЙ ДРАЙВЕР микрософт для работы с жесткими дискам(а не те, что, бывают, прилагаются в комплекте к материнским платам/чипсетам), НЕ установлена ни одна «мониторилка» дисков.
д) Запаситесь полными версиями программ R-Studio, GetDataBack for FAT/NTFS, DMDE, WinHex и свежеустановленной, на другом винте, WinXP(или загрузочным диском с ней, пример-Hiren`s BootCD).
е) Четко следуйте инструкциям здешних спецов(в частности-Antech), не проявляйте самодеятельность, иначе данные, потом, можно будет уже и не спасти.

7. НИКОГДА и НИГДЕ нет гарантии того, что вы восстановите все свои данные в том виде, в котором они у вас были, и восстановите ли их вообще. Чтоб такого не было-всегда используйте бэкап.

197. Antech , 29.03.2010 22:55
xxxfakaxxx
Посмотрите, что покажет DMDE в окне «Разделы» при открытии физического. Если разделы там, покажите скрин. Иначе сделайте Поиск NTFS и также покажите лог и скрин результатов.

Парт Мэджик и Чекдиск были плохими идеями.

Добавление от 30.03.2010 09:02:

stalker18
MFT у всех разделов повреждена: первые 4 записи — глючные единички (глючно поднят первый бит в каждом втором байте по типу 00 01 00 01 00 01. ).

MFT-1 (http://slil.ru/28877925) . DMDE — физический — сервис — заполнить секторы — файл. Первый сектор 2097215, число секторов 8. Перезагрузка. Чекдиск на исправление лучше не допускайте. Проверьте, доступен ли первый раздел (скорее всего, нет). Пустите chkdsk.exe БукваПервогоРаздела: и покажите результат. Он сообщит от ошибке в атрибуте 176 записи 0. Это нормально. Важно, что он еще скажет. Если больше ничего, то можно и /f ему разрешить, раздел должен стать доступным.
По остальным разделам потом, время ограничено. С другими разделами может быть не так просто.

198. эстэд , 30.03.2010 10:38
Всем добрый день!

1. HDD HP GB0500EAFJH (Seagate) Barracuda ES.2 ST3500320NS 500Gb
2. Стоял на Server 2003 R2 SP2, сейчас винт стоит на компе с XP Pro SP2
3. 2 раздела, тип основной, раздел 31 Мб не распределен и собственно раздел с инфой, NTFS, исправен.
4. Скорее всего из-за скачка панряжения, которой не смог сгладить ups.
Вскоре после него, перестал начались проблемы с доступом по сети (он расшарен) и сообщения о потере данных. Винт иногда не видится биосом, когда видится, то пишет что статус bad.
5. К сожалению проверял chkdsk, процесс завис на этапе проверки содержимого файла, 4 из 5.
Память не тестировал, не думаю, что дело в ней.
БП — ML150G5 750W Redundant Power Supply Kit, Euro (incl 2x750W RPS)
6. нет

Сейчас делаю образ R-Studio, часть файлов скопировал. Получится ли скопировать\восстановить все, что для этого нужно сделать? Спасибо!

Работа с текстовыми файлами

Работа с текстовыми файлами

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

  • 1. Открыть файл, для того, чтобы к нему можно было обращаться. Соответственно, открывать можно для чтения, записи, чтения и записи, переписывания или записи в конец файла и т.п. Когда вы открываете файл, может также произойти куча ошибок – файла может не существовать, это может быть файл не того типа, у вас может не быть прав на работу с файлом и т.д. Всё это необходимо учитывать.
  • 2. Непосредственно работа с файлом — запись и чтение. Здесь также нужно помнить, что мы работаем не с памятью с произвольным доступом, а с буферизированным потоком, что добавляет свою специфику.
  • 3. Закрыть файл. Так как файл является внешним по отношению к программе ресурсом, то если его не закрыть, то он продолжит висеть в памяти, возможно, даже после закрытия программы (например, нельзя будет удалить открытый файл или внести изменения и т.п.). Кроме того, иногда необходимо не закрывать, а «переоткрывать» файл для того, чтобы, например, изменить режим доступа.

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

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

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

Объект FILE сам по себе является структурой, но к его полям не должно быть доступа. Переносимая программа должна работать с файлом как с абстрактным объектом, позволяющим получить доступ до файлового потока.

Создание и выделение памяти под объект типа FILE осуществляется с помощью функции fopen или tmpfile (есть и другие, но мы остановимся только на этих).

Функция fopen открывает файл. Она получает два аргумента – строку с адресом файла и строку с режимом доступа к файлу. Имя файла может быть как абсолютным, так и относительным. fopen возвращает указатель на объект FILE, с помощью которого далее можно осуществлять доступ к файлу.

Например, откроем файл и запишем в него Hello World

Функция fopen сама выделяет память под объект, очистка проводится функцией fclose. Закрывать файл обязательно, самостоятельно он не закроется.

Функция fopen может открывать файл в текстовом или бинарном режиме. По умолчанию используется текстовый. Режим доступа может быть следующим

Параметры доступа к файлу.

Тип Описание
r Чтение. Файл должен существовать.
w Запись нового файла. Если файл с таким именем уже существует, то его содержимое будет потеряно.
a Запись в конец файла. Операции позиционирования (fseek, fsetpos, frewind) игнорируются. Файл создаётся, если не существовал.
r+ Чтение и обновление. Можно как читать, так и писать. Файл должен существовать.
w+ Запись и обновление. Создаётся новый файл. Если файл с таким именем уже существует, то его содержимое будет потеряно. Можно как писать, так и читать.
a+ Запись в конец и обновление. Операции позиционирования работают только для чтения, для записи игнорируются. Если файл не существовал, то будет создан новый.

Если необходимо открыть файл в бинарном режиме, то в конец строки добавляется буква b, например “rb”, “wb”, “ab”, или, для смешанного режима “ab+”, “wb+”, “ab+”. Вместо b можно добавлять букву t, тогда файл будет открываться в текстовом режиме. Это зависит от реализации. В новом стандарте си (2011) буква x означает, что функция fopen должна завершиться с ошибкой, если файл уже существует. Дополним нашу старую программу: заново откроем файл и считаем, что мы туда записали.

Вместо функции fgets можно было использовать fscanf, но нужно помнить, что она может считать строку только до первого пробела.
fscanf(file, «%127s», buffer);

Также, вместо того, чтобы открывать и закрывать файл можно воспользоваться функцией freopen, которая «переоткрывает» файл с новыми правами доступа.

Функции fprintf и fscanf отличаются от printf и scanf только тем, что принимают в качестве первого аргумента указатель на FILE, в который они будут выводить или из которого они будут читать данные. Здесь стоит сразу же добавить, что функции printf и scanf могут быть без проблем заменены функциями fprintf и fscanf. В ОС (мы рассматриваем самые распространённые и адекватные операционные системы) существует три стандартных потока: стандартный поток вывода stdout, стандартный поток ввода stdin и стандартный поток вывода ошибок stderr. Они автоматически открываются во время запуска приложения и связаны с консолью. Пример

Ошибка открытия файла

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

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

В простых случаях можно действовать влоб, как в предыдущем куске кода. В более сложных случаях используются методы, подменяющиее RAII из С++: обёртки, или особенности компилятора (cleanup в GCC) и т.п.

Буферизация данных

Как уже говорилось ранее, когда мы выводим данные, они сначала помещаются в буфер. Очистка буфера осуществляется

  • 1) Если он заполнен
  • 2) Если поток закрывается
  • 3) Если мы явно указываем, что необходимо очистить буфер (здесь тоже есть исключения:)).
  • 4) Также очищается, если программа завершилась удачно. Вместе с этим закрываются и все файлы. В случае ошибки выполнения этого может не произойти.

Форсировать выгрузку буфера можно с помощью вызова функции fflush(File *). Рассмотрим два примера – с очисткой и без.

Раскомментируйте вызов fflush. Во время выполнения откройте текстовый файл и посмотрите на поведение.

Буфер файла можно назначить самостоятельно, задав свой размер. Делается это при помощи функции

которая принимает уже открытый FILE и указатель на новый буфер. Размер нового буфера должен быть не меньше чем BUFSIZ (к примеру, на текущей рабочей станции BUFSIZ равен 512 байт). Если передать в качестве буфера NULL, то поток станет небуферизированным. Можно также воспользоваться функцией

которая принимает буфер произвольного размера size. Режим mode может принимать следующие значения

  • _IOFBF — полная буферизация. Данные записываются в файл, когда он заполняется. На считывание, буфер считается заполненным, когда запрашивается операция ввода и буфер пуст.
  • _IOLBF — линейная буферизация. Данные записываются в файл когда он заполняется, либо когда встречается символ новой строки. На считывание, буфер заполняется до символа новой строки, когда запрашивается операция ввода и буфер пуст.
  • _IONBF – без буферизации. В этом случае параметры size и buffer игнорируются.

В случае удачного выполнения функция возвращает 0.

Пример: зададим свой буфер и посмотрим, как осуществляется чтение из файла. Пусть файл короткий (что-нибудь, типа Hello, World!), и считываем мы его посимвольно

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

Функция int feof (FILE * stream); возвращает истину, если конец файла достигнут. Функцию удобно использовать, когда необходимо пройти весь файл от начала до конца. Пусть есть файл с текстовым содержимым text.txt. Считаем посимвольно файл и выведем на экран.

Всё бы ничего, только функция feof работает неправильно. Это связано с тем, что понятие «конец файла» не определено. При использовании feof часто возникает ошибка, когда последние считанные данные выводятся два раза. Это связано с тем, что данные записывается в буфер ввода, последнее считывание происходит с ошибкой и функция возвращает старое считанное значение.

Этот пример сработает с ошибкой (скорее всего) и выведет последний символ файла два раза.

Решение – не использовать feof. Например, хранить общее количество записей или использовать тот факт, что функции fscanf и пр. обычно возвращают число верно считанных и сопоставленных значений.

Примеры

1. В одном файле записаны два числа — размерности массива. Заполним второй файл массивом случайных чисел.

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

3. Пользователь вводит данные с консоли и они записываются в файл до тех пор, пока не будет нажата клавиша esc. Проверьте программу и посмотрите. как она себя ведёт в случае, если вы вводите backspace: что выводится в файл и что выводится на консоль.

4. В файле записаны целые числа. Найти максимальное из них. Воспользуемся тем, что функция fscanf возвращает число верно прочитанных и сопоставленных объектов. Каждый раз должно возвращаться число 1.

Другое решение считывать числа, пока не дойдём до конца файла.

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

Файл с переводом выглядит примерно так

солнце sun
карандаш pen
шариковая ручка pencil
дверь door
окно windows
стул chair
кресло armchair

и сохранён в кодировке cp866 (OEM 866). При этом важно: последняя пара cлов также заканчивается переводом строки.

Алгоритм следующий — считываем строку из файла, находим в строке знак табуляции, подменяем знак табуляции нулём, копируем русское слово из буфера, копируем английское слово из буфера, проверяем на равенство.

6. Подсчитать количество строк в файле. Будем считывать файл посимвольно, считая количество символов ‘\n’ до тех пор, пока не встретим символ EOF. EOF – это спецсимвол, который указывает на то, что ввод закончен и больше нет данных для чтения. Функция возвращает отрицательное значение в случае ошибки.
ЗАМЕЧАНИЕ: EOF имеет тип int, поэтому нужно использовать int для считывания символов. Кроме того, значение EOF не определено стандартом.

Как запустить программу без операционной системы: часть 6. Поддержка работы с дисками с файловой системой FAT

В пятой части нашей серии статей мы показали, как можно использовать прерывания BIOS’а после перехода в защищенный режим, и в качестве примера определили размер оперативной памяти. Сегодня мы разовьем этот успех и реализуем полноценную поддержку работы с дисками с файловой системой FAT16 и FAT32. Работу с файлами на диске можно разбить на 2 части: работа с файловой системой и работа с диском на уровне чтения/записи секторов. Можно сказать, что для этого нам нужно написать «драйвер» файловой системы и «драйвер» диска.

Работа с диском на уровне чтения/записи секторов

Для начала научимся работать с диском.
Итак, мы можем вызывать прерывания BIOS’а. Помимо прочих возможностей, BIOS предоставляет интерфейс для работы с диском, а именно — прерывание int 0x13. Со списком сервисов, предоставляемых прерыванием, можно ознакомиться на википедии. Нас интересуют сервисы чтения и записи дисков.

Существует два способа адресации сектора на диске, с которыми работает BIOS – CHS(cylinder-head-sector) и LBA(logical block addressing). Адресация CHS основана на использовании геометрии диска, и адресом сектора является совокупность трех координат: цилиндр, головка, сектор. Способ позволяет адресовать до 8Гб. Прерывание int0x13 предоставляет возможность читать и писать на диск с использованием этой адресации.

Понятно, что 8Гб — это очень мало, и данный способ адресации является устаревшим, а все современные (и не очень) контроллеры жестких дисков поддерживают адресацию LBA. Адресация LBA абстрагируется от геометрии диска и присваивает каждому сектору собственный номер. Нумерация секторов начинается с нуля. LBA для задания номера блока использует 48 бит, что позволяет адресовать 128 ПиБ, с учетом размера сектора в 512 байт. Прерывание int0x13 предоставляет два сервиса для чтения и записи секторов на диск с использованием LBA. Их мы и будем использовать. Для чтения сектора прерывание in0x13 ожидает следующие параметры:

Прерывание возвращает следующие значения:

Один из параметров – номер диска. Нужно как-то узнать номер диска, с которым мы собрались работать. Нумерация происходит следующим образом: флоппи-диски (fdd), и все, что эмулируется как флоппи, нумеруются с нуля, а жесткие диски (hdd), и все, что эмулируется как они(usb-флешки, например), нумеруются с 0x80. Этот номер никак не связан с последовательностью загрузки в настройках BIOS’а. В нашем случае, диск, с которым мы собираемся работать, является тем диском, с которого мы загрузились.

Когда BIOS передает управление MBR, он загружает его по адресу 0000h:7C00h, а в регистре DL передает нужный нам номер загрузочного устройства. Это является частью интерфейса взаимодействия между BIOS и MBR. Таким образом, этот номер попадает в GRUB, где далее используется для работы с диском. GRUB, в свою очередь, передает этот номер ОС как часть структуры Multiboot information.

Сразу после передачи управления от GRUB’а к ОС в регистре EBX находится указатель на эту структуру. Первое поле структуры – это flags, и если в нем выставлен 2-й бит, то поле boot_device корректно. Это поле так же принадлежит структуре Multiboot information и в его старшем байте (размер поля – 4 байта) хранится нужный нам номер диска, который понимает прерывание int0x13. Таким образом, используя GRUB, мы получили недостающий параметр для чтения/записи секторов на диск.

Мы научились читать и писать сектора на диск, это, безусловно, важно. Но файловая система привязана не к целому диску, а только к его части – разделу. Для работы с файловой системой нужно найти сектор, с которого начинается раздел, на котором она располагается. Информация об имеющихся на диске секторах хранится в первом секторе диска, там же, где располагается MBR. Существует много различных форматов MBR, но для всех них верна следующая структура:

Информация о разделах хранится в таблице разделов. На диске может быть только 4 первичных раздела, с которых можно загрузиться. На запись о разделе приходится 8 байт. Первый байт — это флаги, если его значение 0x80, то раздел загрузочный. Код MBR в процессе своей работы пробегает по этим 4-м разделам в поиске загрузочного раздела. После его обнаружения, MBR копирует содержимое первого сектора этого раздела на адрес 0000h:7C00h и передает туда управление. Нас интересует LBA адрес первого сектора загрузочного раздела, так как именно на нем располагается наше ядро, и присутствует файловая система, которую мы собираемся читать. Для того чтобы получить этот адрес, нужно прочитать первый сектор диска, найти на нем таблицу разделов, в таблице разделов найти загрузочный раздел, а из его записи прочитать нужное поле.

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

Работа с файловой системой

Для работы с файловой системой мы будем использовать библиотеку fat_io_lib. Библиотека доступна под лицензией GPL. Она предоставляет интерфейс для работы с файлами и директориями, аналогичный имеющемуся в libc. Реализованы такие функции, как fopen(), fgets(), fputc(), fread(), fwrite() и т.д. Библиотека для своей работы требует всего лишь две функции: записать сектор и прочитать сектор, причем первая является необязательной. Функции имеют следующий прототип:

Библиотека написана на чистом С, что опять-таки нам на руку. Для использования в своей мини-ОС нам не придется менять в ней ни строчки. Библиотека ожидает, что чтение секторов происходит в рамках раздела с файловой системой.

Итак, у нас есть функции чтения/записи сектора на раздел и есть библиотека для работы с FAT16/32, которая использует эти функции. Осталось собрать все воедино и продемонстрировать результат. Но прежде чем перейти к коду, хотелось бы показать, что подход, который мы собираемся использовать, вполне применим в реальной жизни. Ниже представлена небольшая часть VBR windows 7, в которой происходит чтение сектора диска посредством прерывания int0x13. Этот код многократно вызывается в процессе загрузки системы, вплоть до момента отрисовки загрузочной анимации.

Для вызова этого кода, Windows 7, подобно тому, как это делаем мы, переходит из защищенного режима в реальный, и обратно. Это несложно проверить, запустив Windows 7 в QEMU. QEMU должен ожидать подключения отладчика. После подключения отладчика (gdb) ставим breakpoint на адрес (0x7c00 + 0x11d). Срабатывание breakpoint’а будет означать вызов этой функции. Кстати в Windows XP этот механизм отсутствует, для вызова прерываний BIOS’а там переходят в режим VM86.

! ВАЖНО! Все дальнейшие действия могут успешно осуществляться только после успешного прохождения всех шагов из пятой части нашей серии статей

Шаг 1. Изменим основную логику в kernel.c

1. Добавим в файле kernel.c следующие объявления:

Код, печатающий размер оперативной памяти

заменим на следующий код:

Память под переменные mbd и magic зарезервирована в файле loader.s, так что их можно использовать аналогично глобальным переменным из кода на С. Переменная magic содержит сигнатуру, подтверждающую, что для загрузки использовался стандарт Multiboot, эталонной реализацией которого является GRUB. Переменная mbd указывает на структуру multiboot_info_t, которая объявлена в multiboot.h. Номер загрузочного диска определяется следующим выражением — p_multiboot_info->boot_device >> 24. Функция InitBootMedia запоминает номер диска и ищет первый сектор файловой системы, чтобы затем все смещения считать от него.

Библиотека fat_io_lib для инициализации требует вызова двух функций: fl_init и fl_attach_media. Первая функция обнуляет внутренние структуры библиотеки, а вторая получает в качестве параметров функции чтения и записи секторов на диск, которые затем используются для обращения к файлам. Далее идет демонстрация работы с библиотекой: выводится список файлов в папке /boot/grub и распечатывается содержимое файла menu.lst.

2. Добавляем файл multiboot.h в папку include. Содержимое файла берем с сайта спецификации предыдущей версии.

Шаг 2. Добавим функции для работы с диском

1. В файл include\callrealmode.h добавим прототипы следующих функций:

2. В файле include\callrealmode_asm.h добавим в enum callrealmode_Func новое значение так, чтобы получилось следующее:

Добавим в union внутри структуры callrealmode_Data только что объявленную структуру callrealmode_read_disk. Должно получиться следующее:

3. В файл include\string.h добавим функции strncmp и strncpy, используемые в библиотеке fat_io_lib.

4. Добавим в файл callrealmode.c следующие объявления:

И несколько функций:

Функции ReadBootMedia и WriteBootMedia используются библиотекой fat_io_lib для чтения/записи секторов. Функция WriteBootMedia не обязательная и является заглушкой, так как в данном примере нет записи на диск. Ее реализация выглядела бы аналогично функции ReadBootMedia. Функция ReadBootMedia похожа на функцию GetRamsize из прошлой статьи с точностью до типа param.func, а вместо param.getsysmemmap используется param.readdisk. Функция InitBootMedia должна быть вызвана раньше двух остальных, так как она инициализирует значения g_BootPartitionStart и g_BootDeviceInt13Num.

5. Изменим callrealmode_asm.s. Добавим еще один тип CALLREALMODE_FUNC_READ_DISK вызываемых функций, должно получиться следующее:

Далее добавим еще одну проверку на тип функции и непосредственно код, читающий с диска. Должно получиться следующее:

Метка readdisk указывает на код, который формирует структуру DAP из структуры callrealmode_Data и вызывает int0x13. В коде после метки callrealmode_switch добавилось 2 инструкции, проверяющие, не нужно ли вызывать readdisk.

6. Добавим файл include\mbr.h, содержащий определения для работы с MBR. Его содержимое:

Структура MBRSector используется в функции InitBootMedia.

Шаг 3. Добавим библиотеку fat_io_lib и запустим

1. Скачаем архив fat_io_lib.zip и распакуем его в папку fat_io_lib в корне проекта.
2. Добавим пустые файлы assert.h и stdlib.h в папку include. Они нужны, что бы библиотека скомпилировалась.
3. Исправим Makefile. Добавим файлы из библиотеки в список целей для компиляции. Должно получиться следующее:

Теперь размер образа равен 10Mb. Это делается для того, чтобы команда mkdosfs отформатировала раздел в FAT16 вместо FAT12. FAT12 не поддерживается библиотекой fat_io_lib.

С этим дефайном библиотека не будет включать stdio.h, но будет использовать готовый прототип функции printf, который совпадает с нашим, и который уже реализован.

4. Пересоберем проект

sudo make image

Должно получиться следующее:

Как и в предыдущих частях, можно сделать dd образа hdd.img на флешку и проверить код на реальном железе, загрузившись с нее.

В результате мы реализовали работу с файловыми системами FAT16 и FAT32. Мы немного схитрили, использовав готовую библиотеку, но разбираться в устройстве FAT’а было бы менее интересно, да и вряд ли бы мы тогда уложились в 1 статью. Надеюсь, вам было интересно читать. Пишите в комментариях, если у вас возникнут проблемы в прохождении описанных шагов!

Илон Маск рекомендует:  Пример HTTP(401) авторизации
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL