Linux
Как правильно разбить жесткий диск с 4кБ секторами (Advanced Format) в Linux
У Western Digital есть быстрый способ приведения в порядок скорости записи — поставить перемычку на контакты 7-8.
Но единожды поставив, снимать ее при «живых» данных на жестком диске нельзя!
Она эмулирует только 63-й сектор, подсовывая на самом деле 64-й. Почему 64-й:
8*512Б / 4096Б = 8.
То есть нам нужен начальный сектор, кратный 8. Для совместимости, сделаем его 64-м.
Следовательно, начало ФС будет совпадать с началом 4кБ сектора и при записи на диск не будет тормозов (обычно тормоза проявляются в минимум троекратной потере скорости записи в файловую систему).
Из всего вышесказанного следует, что если разделов на диске несколько, то последующие разделы все равно необходимо будет выравнивать вручную даже при наличии перемычки!
А если перемычку вынуть, таблица разделов сместится обратно на 1 сектор. Куда денутся ваши данные вопрос сложный. Возможно, они останутся целыми и вы сможете их увидеть, вернув перемычку на место. Но те случаи, которые описаны в интернете, говорят об обратном.
Итак. Подключили новый диск, посмотрели, где он находится:
bash-3.2# fdisk -l
Disk /dev/sda: 250.0 GB, 250058268160 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 30394 244139773+ fd Linux raid autodetect
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Disk /dev/md0: 249.9 GB, 249998999552 bytes
2 heads, 4 sectors/track, 61034912 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md0 doesn’t contain a valid partition table
Он у нас в /dev/sdb. Смотрим на передаваемый системе размер сектора:
bash-3.2# hdparm -I /dev/sdb | grep Sector size
Logical/Physical Sector size: 512 bytes
Вкупе с информацией на диске, что он Advanced Format, заключаем, что имеем дело с эмуляцией размера сектора.
Начинаем создавать разделы.
Создаем (выбрать n) primary раздел (выбрать p), указываем номер раздела (выбрать 1), начиная с First sector: 64.
Last sector можно оставить по умолчанию, если раздел будет один. Если нужно несколько разделов, в качестве Last sector выбираем число, делящееся на 4096 без остатка. Тогда стартовый сектор следующего раздела будет Last Sector + 1.
В примере указано, что раздел будет помечен как Linux raid autodetect (fd) — это на любителя (надо выбрать команду t), можете оставить Linux (83).
Далее посмотрим созданные разделы (команда p) и если все правильно, запишем таблицу разделов на диск (команда w).
bash-3.2# fdisk -u /dev/sdb
The number of cylinders for this disk is set to 121601.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First sector (63-1953525167, default 63): 64
Last sector or +size or +sizeM or +sizeK (64-1953525167, default 1953525167):
Using default value 1953525167
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): p
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 64 1953525167 976762552 fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Создаем файловую систему с размером кластера 4096 байт:
bash-3.2# mkfs.xfs -f -b size=4096 /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=32, agsize=7630957 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=244190624, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=32768, version=1
= sectsz=512 sunit=0 blks
realtime =none extsz=65536 blocks=0, rtextents=0
Монтируем диск
bash-3.2# mkdir /mnt/hdd2
bash-3.2# mount -t xfs /dev/sdb1 /mnt/hdd2
bash-3.2# df -h | grep sdb
/dev/sdb1 932G 1.1M 932G 1% /mnt/hdd2
Проверяем скорость записи:
bash-3.2# dd if=/dev/zero of=/mnt/hdd2/000.dd bs=128K count=1000
1000+0 records in
1000+0 records out
131072000 bytes (131 MB) copied, 1.39036 seconds, 94.3 MB/s
Увеличиваем размер записываемого файла:
bash-3.2# dd if=/dev/zero of=/mnt/hdd2/000.dd bs=128K count=10000
10000+0 records in
10000+0 records out
1310720000 bytes (1.3 GB) copied, 14.7553 seconds, 88.8 MB/s
Удаляем созданный тестом файл:
bash-3.2# rm /mnt/hdd2/000.dd
Диск готов к эксплуатации. Добавляем команды монтирования при загрузке, если надо и пользуемся.