Что средства Windows, что сторонние программы для распределения места на диске и форматирования разделов по умолчанию настроены так, чтобы за нас оптимально решать вопрос, какого размера должен быть кластер выделенной части дискового пространства. Что такое кластер, что такое его размер, какой размер лучше выбрать в той или иной ситуации, как изменить размер кластера, в том числе без потери данных на разделе диска – во всех этих вопросах попробуем разобраться ниже.
1. Что такое кластер дискового пространства
Кластер – это логическая единица дискового пространства, минимальный его блок, выделяемый для записи файла. У жёстких дисков есть физическая единица дискового пространства – сектор. Сектора могут быть размером 512 или 4096 байт. Это предустановленный производителем жёсткого диска параметр, и он не может быть изменён программными средствами. Последние могут оперировать только логической единицей – кластером. И оперировать только в рамках возможностей выбранной файловой системы. К примеру, для NTFS размер кластера может быть установлен от 512 байт до 2 Мб (2048 Кб).
Размер кластера, отличный от предлагаемого по умолчанию, мы можем выбрать при форматировании раздела средствами Windows.
Windows 7 и 8.1 позволяют установить размер кластера максимум 64 Кб. В среде же Windows 10 можно выбрать больший размер – от 128 до 2018 Кб.
Размер кластера также можем выбрать по своему усмотрению при создании разделов в штатном управлении дисками. Создаём том (раздел).
Указываем размер тома.
Идём далее.
И на этапе форматирования тома выбираем размер кластера.
Итак, кластер – это единичный блок для размещения файлов. Каждый файл записывается в новый кластер. Файл весом более размера кластера, соответственно, занимает несколько таковых. Чем меньше размер кластера, тем более эффективно будет расходоваться место на диске при условии, что на нём преимущественно хранятся мелкие файлы до 512, 1024, 2048 байт и т.д. Тогда как при кластере большего размера дисковое пространство будет менее эффективно занято данными с малым весом. Но вопрос об эффективности не будет стоять при условии хранения на диске данных с весом от 64 Кб или иного выбранного размера. При этом ещё и получаем незначительный прирост производительности в скорости чтения и записи HDD в условиях фрагментации. При большем размере кластера фрагментированный файл делится на меньшее количество частей, что уменьшает число смещений считывающей головки HDD.
2. Насколько значителен прирост производительности при большем размере кластера
Рассчитывать на какой-то весомый прирост производительности HDD даже при максимально возможном размере кластера не стоит. Сам по себе механизм работы HDD имеет массу условностей, и гораздо больше толку в этом плане будет от регулярной процедуры дефрагментации. Прирост в скорости работы с данными будет исчисляться секундами, а то и вовсе миллисекундами. Тем не менее и за них, возможно, стоит побороться при формировании разделов для хранения файлов с весом, исчисляемым преимущественно в мегабайтах или вовсе в гигабайтах.
3. Какой размер кластера для каких целей лучше
Какой размер кластера лучше для системного раздела С ? Установочный процесс Windows, позволяющий прямо на этапе установки системы формировать разделы диска с нераспределённым пространством, не даёт нам возможности выбора размера кластера.
Он по умолчанию задаётся 4096 байт (4 Кб). И является оптимальным выбором для системного раздела С, поскольку в состав системы и сторонних программ входит огромное множество мелковесных файлов. Изменять его не рекомендуется.
А вот с несистемными разделами можно поэкспериментировать. Но прежде необходимо оценить текущую ситуацию и узнать, какой размер кластера у раздела сейчас. Чтобы потом сделать выводы о приросте производительности.
4. Как узнать размер кластера
Существующий ныне размер кластера на нужном разделе диска отображают сторонние программы для работы с дисковым пространством. Но на скорую руку можно обойтись и без них, для этого нам понадобится всего лишь запущенная с правами админа командная строка.
В неё вводим команду по типу:
fsutil fsinfo ntfsinfo C:
Где вместо C в конце подставляем букву нужного раздела. И смотрим графу «Байт на кластер».
5. Как изменить размер кластера
Как упоминалось в первом пункте статьи, для изменения размера кластера необходимо либо отформатировать раздел, либо удалить его и создать заново. Хоть средствами Windows, хоть сторонним софтом для работы с дисками от Acronis, AOME, Paragon и т.п. Если на разделе имеются данные, их можно временно перенести на другой раздел, другое устройство информации или в облако на крайний случай. И это будет самый правильный вариант.
Изменение размера кластера раздела с имеющимися данными без их временного переноса в другое место – это потенциально рисковая операция. Рисковая операция – во-первых. Длительная по времени — во-вторых, поскольку в рамках её проведения осуществляется перезапись данных под новый размер кластера. В-третьих – такая операция предусматривается только сторонними менеджерами дисков, и обычно в рамках платных возможностей, если базовые функции в таких программах бесплатны. Как, например, в случае с MiniTool Partition Wizard.
5.1. MiniTool Partition Wizard
В любой из коммерческих редакций MiniTool Partition Wizard можем изменить размер кластера без форматирования и пересоздания раздела, с сохранностью данных. Кликаем в окне программы нужный раздел, выбираем функцию изменения кластера.
Смотрим, какой у нас текущий размер. И в выпадающем списке выбираем новый. Затем жмём «Да».
Штатные средства Windows при задании размера кластера предусматривают выбор их показателей в байтах, килобайтах и в случае с Win10 в мегабайтах. Сторонние программы могут предусматривать выбор показателей в иной метрике – в секторах на кластер. Это число в степени двойки. Как ориентироваться? Просто делим на 2. Если хотим выбрать размер кластера, скажем, 64 Мб, указываем число 128. Если 32 Кб, выбираем число 64. Если 16 Кб – 32. И так далее по этому же принципу.
В главном окне MiniTool Partition Wizard применяем операцию и ожидаем её завершения.
При оперировании системного раздела С или несистемного, но такового, к которому обращаются фоновые системные процессы, программа попросит перезагрузиться. И будет проводить операцию в предзагрузочном режиме без активных системных процессов.
5.2. Acronis Disk Director
Платный Acronis Disk Director, мастодонт на рынке ПО для оперирования дисковым пространством, также предусматривает возможность изменения размера кластера без потери данных. В окне программы выбираем нужный раздел, кликаем соответствующую операцию.
Смотрим, какой сейчас у раздела размер кластера. И из выпадающего перечня выбираем новый.
Применяем операцию.
И, опять же, если оперируемый раздел будет занят обращениями к нему фоновых системных процессов, потребуется перезагрузка и работа программы в предзагрузочном режиме.
Загрузка…
Все файловые системы, которые Windows Использование XP для организации жесткого диска основано на размере кластера (единицы выделения), который представляет наименьший объем дискового пространства, которое может быть выделено для хранения файла. Чем меньше размер кластера, тем более эффективно ваш диск хранит информацию. Если вы не укажете размер кластера для форматирование, Windows Управление дисками XP основывает размер кластера на размере тома. Windows XP использует значения по умолчанию, если вы форматируете том как NTFS одним из следующих способов:
- С помощью команда форматирования из командной строки без указания размера кластера.
- By форматирование тома в управлении дисками без изменения размера единицы размещения по умолчанию в диалоговом окне «Формат».
Следующая таблица показывает размер кластера по умолчанию для NTFS при Windows XP использует форматирование.
Размер кластера по умолчанию для FAT файловая система. Эти размеры apply к любой операционной системе, которая поддерживает ЖИР:
Для поддержки разделов FAT размером более 4 ГБ с использованием кластеров размером 128 или 256 КБ на дисках должны использоваться сектора размером более 512 байт. Внимание: На очень маленьких разделах FAT вместо 12-битной FAT используется 16-битная FAT. Файловая система FAT поддерживает только 512-байтовые секторы, поэтому количество секторов на кластер и размер кластера являются фиксированными. На томах с размером кластера более 4 КБ сжатие не поддерживается
Зачем менять размер кластера?
Кластер — это единица размещения. Если вы создаете файл, допустим, размером 1 байт, по крайней мере, один кластер должен быть размещен в файловой системе FAT. В NTFS, если файл достаточно мал, его можно сохранить в самой записи MFT без использования дополнительных кластеров. Когда файл выходит за границу кластера, выделяется другой кластер. Это означает, что чем больше размер кластера, тем больше дискового пространства расходуется впустую, однако производительность выше. Однако, когда вы форматируете раздел вручную, вы можете указать размер кластера 512 байт, 1 КБ, 2 КБ, 4 КБ, 8 КБ, 16 КБ, 32 КБ, 64 КБ в диалоговом окне форматирования или в качестве параметра в командной строке. Утилита FORMAT. Что это нам дает? Определите средний размер файла и соответствующим образом отформатируйте раздел.
Как определить правильный размер кластера?
Самый простой (но приблизительный) способ — разделить количество файлов на диске на общее использование диска в килобайтах. Другая идея — заранее оценить примерный размер данных перед форматированием жесткого диска. Если вы собираетесь хранить мультимедийные файлы, которые обычно огромны, увеличьте размер кластера, чтобы повысить производительность. Если вы планируете хранить небольшие веб-страницы или текстовые документы, уменьшите размер кластера, чтобы не терять много места на диске. Считать!
Как изменить размер кластера без потери данных?
Если вы хотите изменить размер кластера существующего раздела, что бы вы сделали, снова отформатировав? Нет, файлы будут потеряны после форматирования раздела, тогда есть ли способ изменить размер кластера без потери или переформатирования данных? Ответ — да. Разделяя программное обеспечение, вы можете легко выполнить эту работу.
Изменить размер кластера с помощью Acronis Disk Director
Подробные сведения см. В том, как изменить размер кластера с помощью Acronis Disk Director.
Пришли SAS диски с неверным размером логического сектора в 520 байт. Диски заказывали для сервера HPE Proliant DL360 Gen9 с RAID контроллером Smart Array P440ar.
При установке такого диска в сервер получаем ошибку (В Smart Storage Administrator):
This physical drive does not support RAID and is not exposed to OS. It cannot be used for configuration on this controller.
Сам диск в списке отображается, его данные определяются. Однако мы видим:
Drive Configuration Type: Unsupported for RAID Configuration.
Logical / Physical Block Size: 520/4160
Я уже встречал подобный размер логического сектора в некоторых хранилищах. Лишние байты используются для дополнительного контроля целостности данных. Размер физического блока 4160 байт. Т.е. один физический блок разбит на восемь логических секторов по 520 байт.
Если посмотреть больше деталей, то ничего нового мы не узнаем. Ещё видно, что диск не пробрасывается в операционную систему.
А какой должен быть размер логического сектора, чтобы RAID контроллер смог с ним работать? Посмотрю на соседнем сервере информацию о каком-нибудь диске. Под руки попался HDD диск, он прекрасно работает в RAID массиве. Размер логического сектора 512 байт. Физического, кстати, тоже.
Со временем появились диски с увеличенным размером физического сектора, чтобы они определялись старыми RAID контроллерами, диск умеет эмулировать размер логического сектора и может отображаться , например, как 512/4096 или 512e/4096. Это так называемый Advanced Format — новый формат разметки секторов. Вместо традиционного сектора размером 512 байт используется 4096 байт. Для решения проблем с совместимостью был введён дополнительный стандарт 512E, который обозначает диски с физическим размером сектора 4096 байт, но при этом эмулирующие обычный размер сектора в 512 байт.
Обычные современные контроллеры поддерживают три формата разметки:
Формат | Размер логического сектора | Размер физического сектора |
512N | 512 байт | 512 байт |
512E | 512 байт | 4096 байт (4КиБ) |
4KN | 4096 байт (4КиБ) | 4096 байт (4КиБ) |
Я точно знаю что RAID контроллер Smart Array P440ar поддерживает форматы 512N и 512E. Не уверен, что он поддерживает 4KN, но это сейчас не важно. Для того чтобы наш диск заработал, нужно изменить размер логического сектора с 520 байт на 512 байт. Это возможно.
Режим HBA
Для начала нужно сделать так, чтобы диск был виден в операционной системе. Для этого переводим контроллер в режим HBA (Host Bus Adapter), в этом режиме контроллер не работает с массивами, а просто передаёт диски операционной системе.
Enable HBA Mode.
OK.
Контроллер перейдёт в режим HBA после перезагрузки. Finish.
Ubuntu Desktop
Менять размер логического сектора будем в Ubuntu. Скачиваем инсталляционный дистрибутив Ubuntu Desktop 20.04.2 — ISO образ. Монтируем к серверу и загружаемся с него.
Работаю удалённо, канал медленный, процесс длительный. А вот и Ubuntu.
Для работы нам понадобится Интернет, загрузим пару пакетов. Самый главный пакет для работы с дисками — sg3-utils.
http://sg.danny.cz/sg/sg3_utils.html
Можно и вручную его скопировать, но там куча зависимостей, лень качать все, будем пользоваться преимуществами Интернета. Настраиваем сеть и обновляем репозиторий.
apt-get update
Работа с дисками
Давайте посмотрим, что у нас с дисками.
dmesg | grep -E "(mpt|scsi|sd)" | less
Я специально оставил в сервере только один диск, чтобы уменьшить количество информации.
Операционная система видит наш диск, но ругается:
Unsupported sector size 520
0 512-byte logical blocks: (0 B/0 B)
Для форматирования диска нужно узнать его имя, можно и в dmesg выловить, но проще воспользоваться вспомогательными пакетами, установим их.
apt-get install lsscsi
apt-get install sg3-utils
Узнаем имя диска с помощью lsscsi:
lsscsi -g
Имя нашего диска /dev/sg1. Имя также можно узнать с помощью утилиты sg_scan из пакета sg3-utils:
sg_scan -i
Проверить размер логического сектора:
sg_readcap /dev/sg1
Размер логического блока указанного диска /dev/sg1 520 байт, имя определили верно.
Приступаем к низкоуровневому форматированию:
sg_format --format --size=512 /dev/sg1
Не забываем указать новый размер логического сектора 512 байт.
Форматирование уничтожит все данные на диске!
Форматирование начинается не сразу, есть несколько секунд на то, чтобы нажать Ctrl+C для отмены операции.
Если ничего не нажимать, то форматирование начнётся.
Процесс долгий, мой SSD диск на 960 Гб форматировался около 20 минут.
FORMAT UNIT Complete. Форматирование завершено.
Посмотрим каким стал размер логического сектора:
sg_readcap /dev/sg1
512 байт, как и планировали.
Проверка
Перезагружаем сервер и входим в Smart Storage Administrator. 512e / 4096 Bytes. Диск прекрасно работает. При переключении контроллера в режим RAID диск может использоваться в RAID массивах.
Мы с вами изменили размер логического сектора диска с 520 байт на 512 байт.
P.S.
На видео к статье я прошиваю оставшиеся три диска точно таким же способом.
P.P.S
Если sg_format выдаёт ошибку вида:
Fixed format, current; Sense key: Illegal Request Additional sense: Parameter list length error Sense Key Specific: Error in Data parameters: byte 0 MODE SELECT command: Illegal request sense key, apart from Invalid opcode
то можно посмотреть в сторону атрибута -6 или —six:
--six|-6 use 6 byte MODE SENSE/SELECT to probe disk (def: use 10 byte MODE SENSE/SELECT)
Например:
sg_format --format --size=512 --six /dev/sg1
Download PC Repair Tool to quickly find & fix Windows errors automatically
Windows 10 file systems organize your hard disk based on cluster size (also known as allocation unit size). If you haven’t specified cluster size when you format a partition, it will select the defaults based on the size of the partition – and this is one of the reasons for which you need to change cluster size of the volume. In this post, we will show you how to change Hard Disk Cluster Size in Windows 10.
By default, the maximum cluster size for NTFS under Windows NT 4.0 and later versions of Windows is 4KB.
Cluster is the smallest unit to save and manage files in the disk in Windows OS. One cluster can only hold one file even if it is only one byte. When you need to save small files, you need to configure a volume with small clusters, which can improve the disk space use ratio. While if you need to save large files, the volume should be appointed with large clusters, which can optimize data read-write speed largely.
In common, 512b cluster is the old generation standard, 4k cluster is more common today, 64k cluster size is for big file storage like game, 3D movie, HD photo. You can change cluster size according to the file size for better performance.
We can change Hard Disk Cluster Size in Windows 10 in 2 quick and easy ways. We’ll explore this topic under the methods outlined below in this section.
1] Change Hard Disk Cluster Size via File Explorer
To change Hard Disk Cluster Size via File Explorer in Windows 10, do the following:
- Press Windows key + E to open File Explorer.
- Right-click on the partition you want to change cluster size, select Format.
- Click Allocation Unit Size (Cluster size).
- Select one cluster size you want to change to from the drop-down.
- Next, select Quick Format > Start.
- Click YES on the format warning prompt to continue.
Once the format completes, you have successfully changed the cluster size.
2] Change Hard Disk Cluster Size using DiskPart
To change Hard Disk Cluster Size using DiskPart in Windows 10, do the following:
- Press Windows key + R to invoke the Run dialog.
- In the Run dialog box, type cmd and then press CTRL + SHIFT + ENTER to open Command Prompt in admin/elevated mode.
- In the command prompt window, type the command below and hit Enter to open the DiskPart utility.
diskpart
Now, type the following commands one after the other and hit Enter after each line:
list disk
select disk #
Replace the hashtag with the number listed for the disk you want to change the cluster size.
list partition
select partition #
Replace the hashtag with the number listed for the partition you want to change the cluster size.
format fs=ntfs unit=<ClusterSize>
Replace the <ClusterSize> placeholder with the actual cluster size you want.
Once the format completes, you have successfully changed the cluster size.
That’s it!
Obinna Onwusobalu has studied Information & Communication Technology and is a keen follower of the Windows ecosystem. He has been a Windows Insider MVP (2020). He runs a computer software clinic.
Download PC Repair Tool to quickly find & fix Windows errors automatically
Windows 10 file systems organize your hard disk based on cluster size (also known as allocation unit size). If you haven’t specified cluster size when you format a partition, it will select the defaults based on the size of the partition – and this is one of the reasons for which you need to change cluster size of the volume. In this post, we will show you how to change Hard Disk Cluster Size in Windows 10.
By default, the maximum cluster size for NTFS under Windows NT 4.0 and later versions of Windows is 4KB.
Cluster is the smallest unit to save and manage files in the disk in Windows OS. One cluster can only hold one file even if it is only one byte. When you need to save small files, you need to configure a volume with small clusters, which can improve the disk space use ratio. While if you need to save large files, the volume should be appointed with large clusters, which can optimize data read-write speed largely.
In common, 512b cluster is the old generation standard, 4k cluster is more common today, 64k cluster size is for big file storage like game, 3D movie, HD photo. You can change cluster size according to the file size for better performance.
We can change Hard Disk Cluster Size in Windows 10 in 2 quick and easy ways. We’ll explore this topic under the methods outlined below in this section.
1] Change Hard Disk Cluster Size via File Explorer
To change Hard Disk Cluster Size via File Explorer in Windows 10, do the following:
- Press Windows key + E to open File Explorer.
- Right-click on the partition you want to change cluster size, select Format.
- Click Allocation Unit Size (Cluster size).
- Select one cluster size you want to change to from the drop-down.
- Next, select Quick Format > Start.
- Click YES on the format warning prompt to continue.
Once the format completes, you have successfully changed the cluster size.
2] Change Hard Disk Cluster Size using DiskPart
To change Hard Disk Cluster Size using DiskPart in Windows 10, do the following:
- Press Windows key + R to invoke the Run dialog.
- In the Run dialog box, type cmd and then press CTRL + SHIFT + ENTER to open Command Prompt in admin/elevated mode.
- In the command prompt window, type the command below and hit Enter to open the DiskPart utility.
diskpart
Now, type the following commands one after the other and hit Enter after each line:
list disk
select disk #
Replace the hashtag with the number listed for the disk you want to change the cluster size.
list partition
select partition #
Replace the hashtag with the number listed for the partition you want to change the cluster size.
format fs=ntfs unit=<ClusterSize>
Replace the <ClusterSize> placeholder with the actual cluster size you want.
Once the format completes, you have successfully changed the cluster size.
That’s it!
Obinna Onwusobalu has studied Information & Communication Technology and is a keen follower of the Windows ecosystem. He has been a Windows Insider MVP (2020). He runs a computer software clinic.
← →
Fabo
(2004-09-01 13:36)
[0]
Как можно длину какого-нибудь сектора жесткого диска менять с 512 байтов на другую?
← →
Digitman ©
(2004-09-01 13:48)
[1]
т.е. одного-единственного среди прочих, оставшихся при этом при размере 512 ?
а никак
эта характеристика задается при форматировании всего носителя
← →
VMcL ©
(2004-09-01 14:21)
[2]
AFAIK, размер сектора нельзя поменять вообще, он всегда 512 байт. А вот кластера можно, но, естественно, при переформатировании.
← →
Digitman ©
(2004-09-01 14:23)
[3]
> VMcL © (01.09.04 14:21) [2]
чтой-то вдруг нельзя ? на то и есть физическое форматирование
← →
Sergey Kaminski ©
(2004-09-01 14:44)
[4]
Disk Base Table байт 03 указывает кол-во байт на физ. сектор. Эту структуру используют сервисы int 13h.
Только физ. формат
← →
Sergey Kaminski ©
(2004-09-01 14:46)
[5]
…ирование.
Ссори, случайно кусок слова Ctrl-X.
← →
Игорь Шевченко ©
(2004-09-01 14:51)
[6]
Digitman © (01.09.04 14:23) [3]
> чтой-то вдруг нельзя ? на то и есть физическое форматирование
Это достоверная информация ? Я могу сделать размер сектора (пусть на всем диске), скажем, 644 байта ?
← →
Digitman ©
(2004-09-01 15:03)
[7]
> Игорь Шевченко © (01.09.04 14:51) [6]
ну ты зря утрируешь, Игорь
прекрасно же знаешь, что размер сектора при форматировании не может быть выбран «от балды» — он должен быть кратен «заветной» степени двойки … причем набор допустимых «кратных» значений тоже фиксирован по числу элементов
← →
Digitman ©
(2004-09-01 15:08)
[8]
> Игорь Шевченко
«когда компьютеры были маленькими» (i80286 был верхом совершенства), а я , соответственно, был еще совсем зеленым и амбициозном в этом деле, «лепил» я как-то раз свою «файловую систему» для «защиты от копирования» из-под MS-DOS … причем беспардонно содрал ее идею с хорошо известной мне ОС РАФОС, но при этом «нарезал» 5-дюймовый флопик на сектора размером в 1к … все замечательно, кстати, получалось и так же замечательно работало, хоть и бестолковый труд был в конечном счете
← →
Игорь Шевченко ©
(2004-09-01 15:11)
[9]
Digitman © (01.09.04 15:03) [7]
Сергей, я просто спрашиваю, я не в курсе современных веяний
Насколько я помню, на флоппи-дисках такие фокусы можно было проделывать, благо там контроллер был простой и атрибуты сектора на диске были записаны в служебном заголовке сектора.
А у винтов вроде есть буфер сектора(ов) (могу, конечно, чушь ляпнуть), а не буфер дорожки целиком и контроллер отдает информацию из буфера сектора(ов).
Поправь, если я ошибаюсь.
← →
Digitman ©
(2004-09-01 15:25)
[10]
> Игорь Шевченко © (01.09.04 15:11) [9]
> Поправь, если я ошибаюсь
утверждать обратное не буду, но контроллер контроллеру рознь … разумеется, я о том контроллере, который стоит на борту винта, а не IDE/EIDE/SCSI и иже с ними ..
← →
Игорь Шевченко ©
(2004-09-01 15:40)
[11]
Digitman © (01.09.04 15:25) [10]
> разумеется, я о том контроллере, который стоит на борту
> винта
Некая разновидность RLL-контроллера там, наверное, стоит, хотя, могу и ошибаться, так как не знаю достоверно, что находится на современных винтах. На старых IDE на самом винте стоял интегрированный RLL-контроллер.
← →
Dimaxx
(2004-09-02 00:33)
[12]
С винтом такие шуточки не пройдут — это не дискета. Этот размер «зашит» на аппаратном уровне. И не нам лезть в аппаратку, если не хочешь проблем на свою голову.
← →
Shiza
(2004-09-02 11:25)
[13]
Позвольте вмешаться господа в вашу дискуссию. Могу сказать следующее: размер сектора можно изменить, но MS-DOS работает только с секторами размером 512 байт, остальные она неувидит. Но если ваша программа будет читать диск средствами BIOS (13int) то пожалуйста, изменяйте.
← →
Игорь Шевченко ©
(2004-09-02 12:22)
[14]
Shiza (02.09.04 11:25)
> Но если ваша программа будет читать диск средствами BIOS
> (13int) то пожалуйста, изменяйте.
В каком именно месте изменять и есть ли работающий пример такого изменения ?
← →
Sergey Kaminski ©
(2004-09-02 17:00)
[15]
Игорь Шевченко © (02.09.04 12:22) [14]
Int 13, AH = 5
Format Disk Track.
ES:BX указывает на структуру 4-й байт которой содержит код размера сектора. См. также [4].
← →
Shiza
(2004-09-02 17:52)
[16]
>В каком именно месте изменять…
Начиная с байта с порядковым номером 12 в загрузочном секторе распологается Блок Параметров БИОС (BPB). Вот его структура:
type
BPB=record
SecSize:Word;//количество байт в секторе
…
остальные поля этой структуры не привожу.
>и есть ли работающий пример такого изменения?
Под Win32 немного сложновато, потому что обращение к сервисам 13int напрямую в отношении жестких дисков недопустимо. Но в MSDN есть пример работы с HD под Win32, но он к сожалению на С++.
А вот под DOS, если честно, изменял сектора но на дискете. С жестким диском всё-таки пока страшновато… вот если б был ненужный винт поэксперементировать…
← →
Игорь Шевченко ©
(2004-09-03 10:09)
[17]
Shiza (02.09.04 17:52) [16]
> А вот под DOS, если честно, изменял сектора но на дискете
Так на дискете и я изменял
Sergey Kaminski © (02.09.04 17:00) [15]
Для не-дискет это имеет смысл ?
Почему спрашиваю — потому что в MSDN для DeviceIoControl и кодов IOCTL_FORMAT_TRACK и IOCTL_FORMAT_TRACK_EX в параметрах форматирования задать размер сектора нельзя.
← →
Shiza
(2004-09-03 10:40)
[18]
> для DeviceIoControl и кодов IOCTL_FORMAT_TRACK и IOCTL_FORMAT_TRACK_EX в параметрах форматирования задать размер сектора нельзя.
А необязательно использовать коды IOCTL_FORMAT_TRACK и IOCTL_FORMAT_TRACK_EX. Главное при работе с DeviceIoControl обратиться к 13int, а остальное уже дело только Ваших рук и головы. Господа я ещё забыл о том, что для работы с 13int можно использовать и драйвер виртуального устройства (vxd).
Изменить размер сектора — можно. Однозначно. Под DOS легко, под Win32 сложноее, но МОЖНО.
← →
Игорь Шевченко ©
(2004-09-03 10:45)
[19]
> Главное при работе с DeviceIoControl обратиться к 13int
Э….DeviceIoControl вообще-то не обращается к int13….
Shiza (03.09.04 10:40) [18]
> Изменить размер сектора — можно. Однозначно. Под DOS легко,
> под Win32 сложноее, но МОЖНО.
А ссылку на примерчик можно ? Хоть на С, хоть на чем, абы менял размер сектора у жесткого диска ?
← →
Shiza
(2004-09-03 16:25)
[20]
>Э….DeviceIoControl вообще-то не обращается к int13
Как же не обращается? В SDK заглянуть можно, и что мы там увидим:
«Windows 95 provides a VxD named VWIN32.VXD that supports a set of control codes that Win32-based applications can use to carry out selected MS-DOS system functions. These system-defined control codes consist of the following values.
Control code (value) Meaning
VWIN32_DIOC_DOS_DRIVEINFO (6) Performs Interrupt 21h Function 730X commands. This value is supported in Windows 95 OEM Service Release 2 and later.
VWIN32_DIOC_DOS_INT13 (4) Performs Interrupt 13h commands
VWIN32_DIOC_DOS_INT25 (2) Performs the Absolute Disk Read command (Interrupt 25h)
VWIN32_DIOC_DOS_INT26 (3) Performs the Absolute Disk Write command (Interrupt 25h)
VWIN32_DIOC_DOS_IOCTL (1) Performs the specified MS-DOS device I/O control function (Interrupt 21h Function 4400h through 4411h)»
ниже идёт код из SDK поэтому не обижайтесь что на С++
hDevice = CreateFile(«\\.\vwin32»,0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL);
fResult = DeviceIoControl(hDevice, 4,®,sizeof(reg), ®, sizeof(reg), &cb, 0); //здесь код 4 и есть код обращения к 13int
Обращается не только к 13 прерыванию, но и к 21, 25 и 26.
>А ссылку на примерчик можно?
Ну, ссылку честно признаться не видел
Но… могу тебе написать код, ты его почитаешь, откомпилишь, и сам проверишь. Идёт? Только одно «но». Давай сразу оговоримся, код будет для DOS или для Win32. Под Win32 быстро не напишу по двум причинам: во-первых я работаю главным бухгалтером, и программированием занимаюсь в свободное от работы время, а во-вторых это немного сложнее чем с DOS.
← →
Alex Konshin ©
(2004-09-03 20:08)
[21]
Проблема только в том, что работает это только флопиков.
Во всяком случае это утверждают те, кто пробовал — мне лично не доводилось.
Я уж не говорю про NT+.
Примеры нужно искать в утилитах форматирования. Их исходники бывают в дистрибутах всяких юниксов среди утилит подготовки диска перед установкой системы.
← →
Игорь Шевченко ©
(2004-09-03 22:48)
[22]
Shiza (03.09.04 16:25) [20]
> Ну, ссылку честно признаться не видел
> Но… могу тебе написать код, ты его почитаешь, откомпилишь,
> и сам проверишь. Идёт?
Ты меня извини, но Алексу Коншину я склонен доверять больше.
Если он говорит, что это для работает только для гибких дисков, в чем меня и собственный опыт убеждает, то скорее всего, экпериментировать с винчестером смысла не имеет.
Или, действительно, стоит посмотреть исходники для Unix — диски-то одни и те же.
С уважением,
← →
Dimaxx
(2004-09-04 00:17)
[23]
Пробовал я дискету отформатировать через IOCTL_FORMAT_TRACK_EX с нестандартным кол-вом секторов на дорожке. Фиг! Форматирует только на 1.44, но не на 1.68. Куда уж там размер сектора…
← →
Alex Konshin ©
(2004-09-04 21:18)
[24]
Вообще-то я не гуру в этом вопросе.
Я не утверждаю, что subj невозможен для ATA HDD, но сомневаюсь.
Особенно сомневаюсь в том, что его можно делать меньше 512 — слишком многое там завязано на этот размер, например, многие команды возвращают результат именно этого размера.
http://www.t13.org/docs2004/D1699-ATA8-ACS.pdfИ из некоторых оговорок тоже следует, что размер сектора 512.
Например, фраза из описания 48-bit address feature set:
The optional 48-bit Address feature set allow devices with capacities up to 281,474,976,710,655 sectors. This allow device capacity up to 144,115,188,075,855,360 bytes.
Если вы поделите эти две цифры, то увидите, что подразумевается размер сектора 512.
В то же время почитайте параграфы 4.21-4.22. Насколько я понял, можно создавать секторы чуть большего размера (520-528 байт), но разные команды по-разному обрабатывают их. Некоторые все равно будут использовать 512 как размер сектора, например, READ BUFFFER, хотя остальные команды чтения будут читать сектора полностью.
Короче, на мой беглый взгляд выглядит так, что subj невозможен, но я допускаю, что я чего-то не заметил.
← →
Shiza
(2004-09-05 10:22)
[25]
>Ты меня извини, но Алексу Коншину я склонен доверять больше.
Как то в форуме был вопрос о том как читать сектора жесткого диска. Я там распинался что читать сектора жесткого диска под Win32 можно и с помощью 13int, на что Алекс мне заметил, что это невозможно. Сначала я ему не поверил, но когда сам попытался прочитать сектор на жестком — получил нефиговую ошибку.
Но… недавно (где-то неделю назад), или в Knowledge Base или в MSDN, нашёл код который читает сектора жесткого диска с помощью 13int. Так что и Алекс Коншин иногда ошибается…
А теперь по теме обсуждения.
Во-первых, определимся, изменяем размер сектора под DOS или под Win32?
Во-вторых, согласны ли вы с тем, что мы обращаемся к прерыванию BIOS, а ему всё равно какой размер у сектора.
В-третьих, если кто-нибудь читал книгу Фаронова В. В. «Turbo Pascal. Практика программирования», то наверняка встретил фразу о том, что изменение размера сектора возможно. Кстати я на каком-то сайте видел эту книгу для чтения он-лайн, кому интересно можете почитать.
← →
Игорь Шевченко ©
(2004-09-05 10:49)
[26]
> Во-первых, определимся, изменяем размер сектора под DOS
> или под Win32?
А какая разница ? Речь идет о работе с железом в данном случае, а ему по барабану, в какой операционной системе с ним работают.
> Во-вторых, согласны ли вы с тем, что мы обращаемся к прерыванию
> BIOS, а ему всё равно какой размер у сектора.
Речь идет о том, все равно ли самому контроллеру диска или нет.
Если ему все равно, тогда размер сектора можно изменить, вне зависимости от BIOS, операционной системы, и т.д. Если не все равно, тогда изменить размер не удастся ни в BIOS, ни в DOS, ни в Win32.
> В-третьих, если кто-нибудь читал книгу Фаронова В. В. «Turbo
> Pascal. Практика программирования», то наверняка встретил
> фразу о том, что изменение размера сектора возможно.
На дискете — возможно.
> Как то в форуме был вопрос о том как читать сектора жесткого
> диска
CreateFile + SetFilePointer + ReadFile
← →
Anatoly Podgoretsky ©
(2004-09-05 11:16)
[27]
Интересно в Линуксе 1024 блоки (сектора) это физическое или логическое понятие?
← →
Shiza
(2004-09-05 13:47)
[28]
Да, господа, плодотворное у нас обсуждение
>Речь идет о работе с железом в данном случае, а ему по барабану, в какой операционной системе с ним работают.
То понятно, только вот мне из под DOS легче обратиться к 13int чем из под NT
>Интересно в Линуксе 1024 блоки (сектора) это физическое или логическое понятие?
А вот это и правда свежая мысль, надо бы высказаться господа, я пока изучу, и в понедельник думаю что-нибудь скажу…
← →
Alex Konshin ©
(2004-09-05 22:21)
[29]
Ну вы почитайте документ-то.
← →
Shiza
(2004-09-06 11:19)
[30]
Ну что, насчёт размера сектора в Линуксе пока утверждать ничего не могу, то что успел прочитать дома на это свет не пролило…
Может чё в интернете найду…
Да, кстати, а чё за сектора у NTFS? А то я если честно с ней не знаком.
>Ну вы почитайте документ-то.
Подожди, дай скачать…
← →
Dimaxx
(2004-09-06 23:26)
[31]
В Линухе размер сектора логическое понятие. То есть файловая система использует именно этот размер, а физический — все равно останется 512 байт.
NTFS — это совмещение кластерного и потокового метода хранения файлов. У нее тоже есть FAT (вернее MFAT), только немного не такая. У нее фрагментация файлов бывает редко и только в том случае, если записать нефрагментированный файл невозможно (а на самом деле это не так — еще как фрагментируются).
← →
Dimaxx
(2004-09-06 23:28)
[32]
Пардон, забыл…
Меняется там все равно размер кластера, а не сектора. Он как был полкило, так и останется…
← →
Игорь Шевченко ©
(2004-09-07 10:03)
[33]
> У нее тоже есть FAT (вернее MFAT), только немного не такая
Еще вернее — MFT, которая вовсе не FAT
← →
Shiza
(2004-09-07 10:06)
[34]
вВопрос такой родился:
Когда диск отформатирован под NTFS, то 13int не работает. Почему?
>В Линухе размер сектора логическое понятие.То есть файловая система использует именно этот размер, а физический — все равно останется 512 байт.
Интересно, зачем это системе логический сектор, если есть кластер?
И ещё. Вот цитата из книги Фаронова В. В.: «С физической точки зрения все секторы одинаковы — как уже говорилось, их емкость в MS-DOS всегда равна 512 байтам».
Думаю автор не просто так вставил «MS-DOS», как думаете?
← →
Игорь Шевченко ©
(2004-09-07 11:25)
[35]
> Когда диск отформатирован под NTFS, то 13int не работает.
> Почему?
Работает
> если есть кластер?
Кластер есть логическое понятие. Сектор есть физическое понятие.
> Думаю автор не просто так вставил «MS-DOS», как думаете?
Думаю, что или надо спросить у автора или не выдергивать фразу из контекста.
← →
Shiza
(2004-09-07 12:44)
[36]
>Ну вы почитайте документ-то.
С моим знанием английского такие документы читать рановато наверное :), но почитав абзацы 4.21 — 4.23, я встретил такие понятия как «Long Physical Sector» и «Long Logical Sector». Даже с моим знанием английского понятно что это понятия разные, и Physical — есть физический, а Logical — есть логический сектор.
Следовательно физический размер сектора может быть нестандартным (512 байт)… но не утверждаю, а предполагаю…
А вы со мной согласны?
← →
Игорь Шевченко ©
(2004-09-07 15:45)
[37]
«В ходе выполнения процедуры так называемого низкоуровневого форматирования (low-level formatting) на носитель записывается информация, которая определяет разметку носителя на цилиндры и секторы. Структура формата включает в себя различную служебную информацию: байты синхронизации, идентификационные заголовки, байты контроля четности и т. д. В современных винчестерах такая информация записывается однократно при изготовлении винчестера. Повреждение этой информации при самостоятельном низкоуровневом форматировании пользователем чревато полной неработоспособностью диска и необходимостью восстановления этой информации в заводских условиях»
http://www.athena.vvsu.ru/glax/disk/hdd.HTML
Желающие изменить размер сектора на диске могут проэкспериментировать. У меня лишнего винчестера нету, так что я от экспериментов устраняюсь.
← →
Shiza
(2004-09-07 15:53)
[38]
Полазив по Интеренту, я пришёл к следующему выводу. Размер сектора жёсткого диска может быть больше 512 байт, но изменить его программными средствами нельзя. Размер сектора зависит от жёсткого диска.
← →
Shiza
(2004-09-07 16:03)
[39]
http://www.athena.vvsu.ru/glax/disk/hdd.HTML
от туда же:
«Теперь Вы знаете, что на жестком диске имеются цилиндры, головки и сектора. Все эти параметры для каждого жесткого диска есть в BIOS. Вы знаете также, что размер сектора жесткого диска не фиксирован, как это было раньше.
В настоящее время эти величины используются только для совместимости с DOS, поскольку они не имеют отношения к физической геометрии диска.»
Так что, всё-таки можно?
← →
Alex Konshin ©
(2004-09-07 20:05)
[40]
Не, ну вы точно не читатели.
Там же в документе написано, что можно сделать сектор больше 512, но делается это для того, чтобы прикладные программы могли записать туда некую служебную информацию. Почему я говорю «служебную»? А потому что некоторые команды чтения-записи все равно будут читать-писать 512 байт.
А понятие «кластер» — все-таки физическое. И в документе описано, как он может выглядеть при нестандартном размере сектора.
Этот документ описывает ATA версию 8, т.е. ту, что еще пока не реализуется. Если хотите, можете почитать описания свех остальных версий ATA на том же сайте. Уверен, что по subj там будет то же самое.
← →
Shiza
(2004-09-08 12:46)
[41]
>А понятие «кластер» — все-таки физическое.
Извинте конечно, я не специалист в этом вопросе, но во всех книгах которыя я читал, кластер — «логическое» понятие. Для дисковода нет такого понятия как кластер. Дисковод работает с цилиндрами, головками, дорожками, секторами, но не с кластерами.
Итак, размер сектора может быть больше 512 байт. А как же его такого-этакого изменить программными средствами? Я почему-то склонен думать что нельзя, но…»что скажет стая?»
И ещё. Господа, обсуждение почему-то не очень активное. Я думаю это всё-таки из-за того, что некоторым людям легче сказать нельзя, чем покопаться в интернете, книгах или в голове.
← →
Alex Konshin ©
(2004-09-08 20:53)
[42]
Как раз-таки дисковод IMHO работает именно с кластерами, точнее с тем, что в Windows называется кластером. Не, я допускаю, что я могу заблуждаться, но мне кажется, что «длинные сектора» и есть кластеры. Там есть два их варианта, и в обном из них контрольные сумма одна на весь «длинный сектор». Ну чем не кластер? Можно, конечно, покопаться и узнать это, но лень… Кому кроме тебя это надо?
И ещё. Господа, обсуждение почему-то не очень активное. Я думаю это всё-таки из-за того, что некоторым людям легче сказать нельзя, чем покопаться в интернете, книгах или в голове.
Так ты документ-то все-таки прочти. Это ж на самом деле и есть самая правда, это описание стандарта ATA, все остальное — выдумки писателей.
← →
Игорь Шевченко ©
(2004-09-08 21:49)
[43]
Alex Konshin © (08.09.04 20:53) [42]
> Как раз-таки дисковод IMHO работает именно с кластерами,
> точнее с тем, что в Windows называется кластером.
Секторы — аппаратно адресуемые блоки носителя.
Кластеры — адресуемые блоки, используемые многими файловыми системами. Размер кластера всегда кратен размеру сектора. файловая система использует кластеры для более эффективного управления дисковым пространством: кластеры, размер которых превышает размер сектора, позволяют разбить диск на блоки меньшей длины — управлять такими блоками легче, чем секторами.
Соломон, Руссинович: «Внутреннее устройство Windows 2000», глава «Файловые системы».
Так что в Windows кластер — это логическое понятие файловой системы.
За документ большое спасибо, обязательно прочитаю, только вот я сразу в этих 366 страницах запутался и не нашел ответа про размер сектора
← →
Alex Konshin ©
(2004-09-08 23:34)
[44]
Кластеры — адресуемые блоки, используемые многими файловыми системами. Размер кластера всегда кратен размеру сектора. файловая система использует кластеры для более эффективного управления дисковым пространством: кластеры, размер которых превышает размер сектора, позволяют разбить диск на блоки меньшей длины — управлять такими блоками легче, чем секторами.
Соломон, Руссинович: «Внутреннее устройство Windows 2000», глава «Файловые системы».
Так что в Windows кластер — это логическое понятие файловой системы.
Так вот судя по документу «длинные сектора» это несколько секторов по 512 объединенных в одну физическую запись, в одном из вариантов даже с одной контрольной суммой на все сектора. То есть, если бы я был разработчиком Windows, так я бы эти самые кластеры реализовывал именно как «длинные сектора», а иначе какой из них толк?
За документ большое спасибо, обязательно прочитаю, только вот я сразу в этих 366 страницах запутался и не нашел ответа про размер сектора
Ну я тоже его через строчку читал, я все-таки не такой уж гуру в этом — мне это никогда не было нужно. Но я же привел номера разделов, где об этом говорится. Возможно, что там еще что-то по этому поводу есть, но это первое, что попалось на глаза.
← →
Anatoly Podgoretsky ©
(2004-09-08 23:59)
[45]
Alex Konshin © (08.09.04 23:34) [44]
Толк от них идет с СРМ, в ней был всего выделен всего один байт под количество секторов, а как только размеры дискет подросли, то им ничего не осталось, как сделать блоки из секторов (кластеры). А если учесть, что DOS 1.0 это CPM, то понятно откуда там кластеры, хоть потом и было FAT12
То есть единственная пользы, это меньшее количество блоков в таблице размещения файлов, сама работа усложняется, а место не рационально используется.
← →
Anatoly Podgoretsky ©
(2004-09-09 00:07)
[46]
Alex Konshin © (08.09.04 20:53) [42]
Нет, есть два варианта работы
1. с секторами, адресуются доржка, головка, сектор (эмулируется, а на старых винчестерах и гибких дисках физически)
2. родной, абсолютные адреса (LBA)
И еще по размерам секторов, наиболее распространены три размера
128 байт, в основном в рам дисках
512 байт, исторически сложилось так у ИБМ, хотя стандартные контролеры поддерживают 128, 256, 512 и 1024 (не могу сказать про современные винчестеры, хотя там говорить о реальном размере сектора и количестве дорожек можно только гадая) и это не относится к остальным не родным файловым системам.
2048 CDFS
← →
Anatoly Podgoretsky ©
(2004-09-09 00:09)
[47]
В дополнение, размер сектора в 512 байт на дискетах появился не сразу, вроде на 3.5 дюйма или на 360 кб, сейчас не помню, но дискеты малой емкость имели в основном 128 байт.
← →
Dimaxx
(2004-09-09 00:11)
[48]
2 Shiza:
>Интересно, зачем это системе логический сектор, если есть кластер?
Ответ на этот вопрос ищи в ответе на другой вопрос: «А зачем в Линухе используется своя файловая система?» Да потому что кластерный метод запатентован Мелкософтом и за его использование нужно платить немалое бабло! Или я неправ? А Линухам надо было уйти от использования мелкософтовских разработок.
← →
Игорь Шевченко ©
(2004-09-09 00:29)
[49]
Alex Konshin © (08.09.04 23:34) [44]
Я увидел в примере про Long Sectors вариант с 524-байтными секторами и фразы:
«The purpose of the long logical sector feature set is to allow additional data words per sector for server
applications. Sectors with 520 or 528 bytes are typical.»
«Devices that implement the Long Logical Sector Feature set are not backward compatible with applications
that use 256 word logical sectors, e.g. desktop and laptop system.»
То есть, физически можно разметить так, что сектор, адресуемый по LBA имеет размер больше, чем 512 байт.
А кстати, что есть packet и non-packet device ?
← →
Cobalt ©
(2004-09-09 00:45)
[50]
2 Dimaxx (09.09.04 00:11) [48]
» — Какая-то у тебя, дядя Фёдор, колбаса неправильная»
Сомневаюсь, что тут именно патент от MS как-то повлиял
файловая система MSDOS не поддерживала права доступа к файлам, потому её и не использовали в Линукс как «родную». А он появился ещё до появления NTFS, поэтому её тоже не использовал. а решил пойти своим путём
← →
Shiza
(2004-09-09 10:33)
[51]
>Кому кроме тебя это надо?
«Я хотел помочь людям!» (цитата из мультфилма «Прометей»)
Мы немного отклонились от темы. У кого-нибудь есть идеи (в виде строк кода) как изменить размер сектора? Или мы ещё рассуждаем можно его изменить или нет?
И ещё. Коль мы затронули тему АТА, то не лишим будет напомнить, что к винчестеру можно обращатся двумя путями: через 13int (сектор, головка, цилиндр), или как в случае с АТА через порты ввода-вывода (LBA). В каком русле будем плыть дальше?
← →
Игорь Шевченко ©
(2004-09-09 10:38)
[52]
> что к винчестеру можно обращатся двумя путями: через 13int
> (сектор, головка, цилиндр)
А BIOS как по-твоему обращается ? Тоже через порты.
← →
Alex Konshin ©
(2004-09-09 10:55)
[53]
И ещё. Коль мы затронули тему АТА, то не лишим будет напомнить, что к винчестеру можно обращатся двумя путями: через 13int (сектор, головка, цилиндр), или как в случае с АТА через порты ввода-вывода (LBA). В каком русле будем плыть дальше?
Первый путь все равно идет через второй. И все равно не ясно, как Windows отнесется к такому сектору, если она его случайно найдет.
Честно говоря, я не знаю, как винчестер обычно отформатирован и как Windows его читает-пишет. Судя по документу, если используются команды DMA, то сектора будут читаться целиком. И что будет, если размер буфера (512) окажется недостаточным? Как Windows отнесется к такой ошибке? Если же используются команды READ/WRITE BUFFER, то всегда будет читаться 512 байт (опять-таки если верить документу). Но все равно я бы на это закладываться не стал бы. Что будет, если диск начнут дефрагментировать? Если же хочется создать свой не Windows раздел с нестандартными секторами и своими драйверами доступа, то тогда вопросов нет — флаг тебе в руки.
И какой именно размер сектора тебе нужен? О чем хоть разговор?
И, собственно, зачем? Может есть более простое решение?
← →
Игорь Шевченко ©
(2004-09-09 12:36)
[54]
Alex Konshin © (09.09.04 10:55) [53]
> И, собственно, зачем? Может есть более простое решение?
Зачем — я могу попробовать догадаться, скорее всего, защита от несанкционированного копирования
← →
Shiza
(2004-09-09 14:23)
[55]
>А BIOS как по-твоему обращается? Тоже через порты.
Да наверное к любому устройству обращаются через порты, но я не о том. Мы как будем обращаться, с помощью ассемблеровских in-out, или через DeviceIOControl?
>И все равно не ясно, как Windows отнесется к такому сектору, если она его случайно найдет.
Почему же не ясно? Она будет считать его сбойным.
>И какой именно размер сектора тебе нужен? О чем хоть разговор?
>И, собственно, зачем? Может есть более простое решение?
Да помоему некоторые уже забыли вопрос на который мы ищем ответ. Вопрос в самом начале форума.
← →
Shiza
(2004-09-09 14:26)
[56]
>Зачем — я могу попробовать догадаться, скорее всего, защита от несанкционированного копирования
Я не знаю зачем это нужно автору вопроса, но мне это интересно.
А насчёт защиты, то это помоему не самый эффективный способ…
← →
Alex Konshin ©
(2004-09-09 19:37)
[57]
Да наверное к любому устройству обращаются через порты, но я не о том. Мы как будем обращаться, с помощью ассемблеровских in-out, или через DeviceIOControl?
Вот сначала нужно понять, чего хотим, а потом уже способы искать.
Под NT+ в порты не попишешь и DeviceIOControl не всегда поможет.
Да помоему некоторые уже забыли вопрос на который мы ищем ответ. Вопрос в самом начале форума.
В вопросе не говорится о конкретном размере. Более-менее ясно, что нельзя сделать сектор меньше 512. Ясно, что теоретически можно сделать его чуть больше 512 или объеденить несколько секторов в длинный. Вот и вопрос: чего хотим и зачем?
← →
Shiza
(2004-09-10 10:15)
[58]
>Под NT+ в порты не попишешь
Да ну почему не попишешь? Можно и под NT писать и читать порты, просто делается это немного сложнее, чем обычные in-out.
>Вот и вопрос: чего хотим и зачем?
Ладно, хоть я и не автор вопроса, но очень хочеться разобраться. Чего хотим? Размер сектора нужен или 524 байт, или 1024, любой, только бы код был рабочий.
← →
Shiza
(2004-09-15 17:14)
[59]
А вот ответ тишина
← →
Alex Konshin ©
(2004-09-15 20:12)
[60]
Дык, а кому это нужно?
В порты напрямую не попишешь. Можно что-то сделать через SPTI или miniport, но IMHO этого все равно будет недостаточно. А уж возиться в выходом в 0 кольцо и т.п. хакерские выходки — извольте сами.
← →
Shiza
(2004-09-16 16:09)
[61]
>В порты напрямую не попишешь.
Да ну блин, ну почему не попишешь??? Можно. И в Win9X, и в WinNT.
>А уж возиться в выходом в 0 кольцо и т.п. хакерские выходки — извольте сами.
Во-первых выход в 0 кольцо не нужен наверное, а во-вторых — я бы назвал это не «хакерские выходки», а низкоуровневое программирование.
>Дык, а кому это нужно?
«Если звёзды зажигают, значит это кому нибудь нужно» (с)
← →
Alex Konshin ©
(2004-09-16 20:44)
[62]
В NT? В порты контроллера IDE? Ну-ну.
Флаг тебе в руки.
← →
Shiza
(2004-09-17 10:41)
[63]
>Флаг тебе в руки.
Не груби.
>В порты контроллера IDE?
Я разве сказал в порты контроллера IDE? Я читал и писал в порты в NT, но с портами контроллера IDE не работал. Но логика подсказывает, что если можно писать в порт по адресу $0070, то можно писать и в порт с другим адресом.
Может поправишь?
← →
Игорь Шевченко ©
(2004-09-17 10:45)
[64]
> но с портами контроллера IDE не работал.
А попробуй поработать. Практика — критерий истины.
← →
Shiza
(2004-09-17 12:54)
[65]
>А попробуй поработать. Практика — критерий истины.
Я бы попробовал, только у меня не IDE контроллер, а SCSI. Да и потом, кто сказал что мы работаем именно в NT?
← →
Игорь Шевченко ©
(2004-09-17 13:21)
[66]
Shiza (17.09.04 12:54) [65]
То есть, насколько я понимаю, тебе важен именно процесс обсуждения, а не результат ?
И какая разница в данном случае, IDE или SCSI ?
← →
Shiza
(2004-09-17 17:20)
[67]
>То есть, насколько я понимаю, тебе важен именно процесс обсуждения, а не результат?
Зря иронизируете. Вы знаете, Игорь, мне на самом деле важен результат: (Shiza (10.09.04 10:15) [58] «…только бы код был рабочий.»)
>И какая разница в данном случае, IDE или SCSI?
Я знаю адреса портов для общения с IDE и не знаю, совпадают ли они для SCSI. Да и потом, для SCSI существует ASPI…
← →
Игорь Шевченко ©
(2004-09-17 17:38)
[68]
> Вы знаете, Игорь, мне на самом деле важен результат
Тут Алекс Коншин спрашивал: а зачем ?
Я присоединяюсь к этому вопросу.
← →
Alex Konshin ©
(2004-09-18 07:07)
[69]
Shiza (17.09.04 10:41) [63]
>Флаг тебе в руки.
Не груби.
Это кто грубит?
Тебе ответили: тебе нужно — ты и экспериментируй. Мне это неинтересно и пользы от этого я не вижу. Если объяснишь зачем это может быть нужно людям, то тогда и посмотрим, стоит ли заморачиваться.
В регистры IDE под NT ты точно не попишешь. По крайне мере без хакерских штучек.
И на SCSI будут проблемы: ASPI есть не везде и не всегда. MS его не поддерживает, Adaptec свой ASPI убрал, а потом и сам исчез. Другие производители тоже далеко не всегда драйвер ASPI предоставляют. Можно работать через SPTI, но там нужны права админа.
← →
Shiza
(2004-09-20 10:52)
[70]
>Мне это неинтересно и пользы от этого я не вижу.
Если не интересно, зачем надо было в форум заходить? Сказать: «Я не могу, значит и вы не сумеете.»?
Для большинства программистов, которые используют Дельфи, почему-то вопросы низкоуровневого программирования кажутся какими-то запретными. В форумах не обсуждать! С БИОСом работать нельзя, с диском напрямую — ни-ни! А если один программист напишет программу на Дельфи, которая читает Linux-разделы, то проэто никто как-будто и не слышал… Дальше WinAPI не пускают! «Не ходите дети в Африку гулять» (с)
>Тут Алекс Коншин спрашивал: а зачем ?
Я могу ошибаться, но по-моему в форум в осовном заходят чтобы задать вопрос, и получить ответ, а не для того, чтобы у них спросили: «А зачем?». Обсуждать давайте как сделать, а не то, зачем это сделать… Если ответ на вопрос не знаете — не отвечайте… Есть предположения как сделать — милости просим
← →
Shiza
(2004-09-22 10:25)
[71]
И тишина…
Привет админ! Скажи, как обрезать на жёстком диске участок со сбойными секторами?
У меня жутко тормозит хард, переустановка операционной системы ничего не решила. По вашему совету проверил жёсткий диск программой Виктория и она нашла очень много секторов с неудовлетворительной задержкой чтения 600 ms (кандидаты в бэд-блоки) — 153, также найдены полноценные бэд-блоки (сбойные сектора) -11. Параметр — Reallocated Sector Count — (remap), обозначающий число переназначенных сбойных секторов, запасными секторами с резервных дорожек — горит красным, как я понял, сбойные сектора переназначать уже нечем.
Читал в интернете, что как-то можно вывести из работы участок жёсткого диска со сбойными секторами. Каким образом это можно сделать?
Привет друзья! Обрезать участок жёсткого диска со сбойными секторами можно в любом месте накопителя: в начале, в середине или конце, самое главное, чтобы сбойные сектора не были разбросаны по всему жёсткому диску, в этом случае проблемный HDD лучше просто заменить. Но часто бэд-блоки не рассыпаны по всему накопителю, а сгруппированы в одном месте, тогда нужно просто взять программу Acronis Disk Director или бесплатную AOMEI Partition Assistant Standard Edition и создать на месте бэд-блоков нераспределённое пространство, подробности далее в статье.
Буквально неделю назад ко мне опять попал жёсткий диск из самых первых статей о программе Виктория и я прямо на нём решил показать вам, как обрезать на HDD участок с «бэдами».
Берём нашего старого знакомого — жёсткий диск WD5000AAKS (объём 500 ГБ). После нашего лечения, он отработал год и хозяин HDD опять пожаловался на его медленную работу и попросил в очередной раз подлечить диск.
В первую очередь смотрим SMART жёсткого диска и видим неудовлетворительное состояние накопителя. Атрибут Reallocated Sector Count, обозначающий число переназначенных сбойных секторов — горит красным, значит запасные сектора на резервных дорожках заканчиваются и сбойные сектора переназначать скоро будет нечем.
Теперь нужно определить местонахождение бэд-блоков на жёстком диске.
Запускаем тест поверхности винчестера в программе Виктория и видим, что сразу после номера блока секторов в адресации LBA — 752610900 на HDD пошли сектора с неудовлетворительной задержкой чтения 600 ms (кандидаты в бэд-блоки). Я несколько раз сканировал поверхность этого жёсткого диска и уже знаю что будет, поэтому выставил начало сканирования накопителя сразу с блока №750000000 (Start LBA).
Именно с этого блока секторов начинают появляться бэд-блоки.
По окончании сканирования, секторов с неудовлетворительной задержкой чтения 600 ms, оказалось более двухсот, а бэд-блоков 8.
- Примечание: Если вам попадётся такой жёсткий диск, то сначала попробуйте избавиться об сбойных секторов в программе Victoria с помощью алгоритмов BB = Advanced REMAP, BB = Erase 256 sect и наконец, если ничего не поможет, произведите запись по всей поляне с помощью алгоритма Запись (стирание), вполне может быть бэд-блоки логические и они будут исправлены программой, именно этого нам удалось добиться в прошлых статьях. Если же состояние накопителя останется неизменным, то нам ничего не останется, как только обрезать на жёстком диске участок со сбойными секторами. Как это сделать.
Итак, мы прекрасно видим, что на моём накопителе бэд-блоки пошли сразу после номера блока секторов в адресации LBA — 752610900 или посмотрите чуть ниже на счётчик обыкновенных мегабайт (Мб), он показывает цифру 367485 Мб (367 Гб),
то есть мне нужно именно с этой точки отрезать всё остальное пространство жёсткого диска до его конца (превратить его в нераспределённое пространство). Так как наш накопитель в объёме 500 Гб, а точнее 465 Гб, значит мы с вами отрежем с конца жёсткого диска пространство от 465-367=98 Гб, а проще отрезать с запасом — 100 Гб
Обрезать пространство жёсткого диска со сбойными секторами желательно на HDD не содержащем разделов и никакой информации, хотя программы Acronis Disk Director и AOMEI Partition могут это сделать и с диском содержащем данные, но происходить это будет ужасно долго, ведь программы будут перемещать файлы, находящиеся на сбойных секторах, и при обращении к этим данным всё будет зависать.
Перед началом работы скопируйте все данные с накопителя (если это получится).
В главном окне программы удаляем раздел вместе с данными с нашего жёсткого диска.
Выделяем диск (D:) левой мышью и жмём на кнопке Удаление раздела (кстати, удалить раздел можете прямо в Управлении дисками).
Быстро удалить раздел.
ОК.
Жмём на кнопку Применить.
Перейти. В некоторых случаях программа может попросить перезагрузку. Далее начнётся процесс удаления раздела.
На месте диска (D:) образуется нераспределённое пространство, выделяем его левой мышью и жмём на кнопку Создание раздела.
Жмём на кнопку Расширенный.
Выбираем Первичный раздел. Ведём разграничитель влево, но не до конца,
создавая диск D: оставляем нераcпределённую область объёмом 100 Гб, именно в этой области находятся сбойные сектора.
ОК.
Применить.
Перейти.
Да.
Начинается процесс создания диска (D:).
ОК.
Результат наших действий. Мы создали на жёстком диске раздел, на котором можно хранить данные или даже установить на него операционную систему. В конце раздела находится нераспределённое пространство, где находятся сбойные сектора (бэд-блоки).
Управление дисками.
Вот таким способом мы и обрезали на жёстком диске участок со сбойными секторами, но наш HDD потерял в объёме 100 Гб.
Чтобы проверить, есть ли у вас сейчас на данный момент бэд-блоки на диске (D:), запустите командную строку от имени администратора и введите команду: chkdsk D: /f (где D: буква проверяемого диска) и утилита (CHKDSK) проверки жёсткого диска на ошибки запустится со специальным параметром поиска повреждённых секторов на указанном разделе (в моём случае D:).
Если бэд-блоков не будет обнаружено, то CHKDSK выведет по окончании сканирования соответствующую информацию:
0 Кб в повреждённых секторах.
Статьи по этой теме:
- Как обрезать жесткий диск сначала. Или как в среде предустановки Windows 10 создать разделы жёсткого диска со смещением с помощью параметра offset, образовав в начале накопителя нераспределённое пространство (содержащее бэд-блоки) и затем установить операционную систему
- Как в среде предустановки Windows 10 создать разделы жёсткого диска со смещением с помощью параметра offset. Способ №2
на диске WD 1TB создается раздел с размером сектора по 512 k, нужно 4096к как можно преобразовать? (debian
диск имеет физический размер кластера в 4096
таблица разделов GPT
-
Вопрос заданболее трёх лет назад
-
1947 просмотров
Пригласить эксперта
Сектор диска — минимальная адресуемая ячейка дискового пространства с которой работает контроллер диска.
Задается производителем HDD, поменять невозможно.
Как правило равна 512байт, в больших дисках, 2Тб и более используется размер сектора 4096 байт
Кластер диска — минимальная адресуемая ячейка дискового пространства с которой работает файловая система.
Задается при форматировании раздела.
Зависит от файловой системы, в NTFS как правило от 4кб до 64кб.
Всем спасибо, проблема была в Advanced Format, через утилиту Gparted все сделал
-
Показать ещё
Загружается…
Сбер
•
Ростов-на-Дону
от 170 000 ₽
10 февр. 2023, в 19:23
1200 руб./в час
10 февр. 2023, в 19:10
1000 руб./за проект
26 янв. 2023, в 10:12
6000 руб./за проект