LINUX.ORG.RU

Как в VirtualBox установить 4к размер сектора?

 , ,


0

1

Сейчас бывают диски с размером логического сектора 4096 байт.

И если мы решили быть стильно-модно-молодежными, установить на винт таблицу gpt, и использовать в VirtualBox, то возникает проблема.

Делаем диск для добавления в VirtualBox:

VBoxManage internalcommands createrawvmdk -filename nvraw0.vmdk -rawdisk /dev/nvme0n1

После чего добавляем диск в виртуалку, грузимся, в виртуалке запускаем gparted, смотрим размер сектора - 512 байт. И вроде бы все работает, несмотря на реальный размер 4096. На такой диск в виртуалке можно поставить систему, и она даже будет работать - но без виртуалки этот диск будет виден как неразмеченный, без таблицы разделов.

Все потому, что таблица разделов gpt живет по-LBA-шно. (Чем LBA отличается от номера сектора - выяснить не удалось, в моем сообщении подразумевается что это одно и то же). Если диск имеет сектора по 512 байт, то LBA1 начинается с аддреса 512, а если сектора 4096 то с аддреса 4096. Собственно, логика в этом есть - это сектор с индексом 1, все законно и логично. Но тогда получается, что таблица gpt, лежит по плавающему адресу, который зависит от размера сектора. Виртуалбокс думал, что сектор по 512 - сделал таблицу как для 512. Нативный линукс видит сектора по 4096, и ищет gpt по 4096, а его нету там, разумеется. Он по 512 (hexedit-ом проверено).

То, что виртуалбокс плохо поддерживает 4к сектора - это понятно. Но вопрос - че с этим можно сделать?



Последнее исправление: chabapok (всего исправлений: 1)

Не выдумывай, LBA это техника ухода от указания 3х мерных координат номера сектора на цилиднре и нужной головке, LBA контроллеру диска даётся просто номер сектора и он автоматически мапится, размер же сектора дефакто всегда считается как 512 байт, то смещение в 4кб - это резерв для размещения кода загрузчика и поэтому в большинстве случаев полезная нугрузка располагается уже за ним

Поторопился, действительно есть 4Kn диски, где уже нет совместимости с 512 байтовым сектором

Ну чтож, похоже разработчики VirtualBox такиеже самоуверенные и не далёкие как и я, и не готовы к 4Kn

Github.com - vbox - partRead()

sparks ★★★
()
Последнее исправление: sparks (всего исправлений: 3)

А можешь поделиться информацией о своём nvme?

bastet:~ # smartctl -c /dev/nvme0n1
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.7.4-1-default] (SUSE RPM)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Firmware Updates (0x16):            3 Slots, no Reset required
Optional Admin Commands (0x0017):   Security Format Frmw_DL Self_Test
Optional NVM Commands (0x0057):     Comp Wr_Unc DS_Mngmt Sav/Sel_Feat Timestmp
Log Page Attributes (0x0f):         S/H_per_NS Cmd_Eff_Lg Ext_Get_Lg Telmtry_Lg
Maximum Data Transfer Size:         128 Pages
Warning  Comp. Temp. Threshold:     82 Celsius
Critical Comp. Temp. Threshold:     85 Celsius

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     8.49W       -        -    0  0  0  0        0       0
 1 +     4.48W       -        -    1  1  1  1        0     200
 2 +     3.18W       -        -    2  2  2  2        0    1000
 3 -   0.0400W       -        -    3  3  3  3     2000    1200
 4 -   0.0050W       -        -    4  4  4  4      500    9500

Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         0

bastet:~ # nvme list
Node                  Generic               SN                   Model                                    Namespace  Usage                      Format           FW Rev  
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
/dev/nvme0n1          /dev/ng0n1            S5GXNX0RA25609B      Samsung SSD 980 PRO 1TB                  0x1        999.03  GB /   1.00  TB    512   B +  0 B   5B2QGXA7
sparks ★★★
()
Ответ на: комментарий от sparks

Конечно, почему нет. Вот даже с ключиком -a (он еще и модель показывает). Сейчас я его переключил на 512, чтобы он работал одинаково как виртуалбокс, так и в системе.

chabapok@chabapok-home:~$ sudo smartctl -a /dev/nvme0n1
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-5.4.0-81-lowlatency] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number:                       KINGSTON SKC3000S1024G
Serial Number:                      50026B7686A52915
Firmware Version:                   EIFK31.6
PCI Vendor/Subsystem ID:            0x2646
IEEE OUI Identifier:                0x0026b7
Total NVM Capacity:                 1,024,209,543,168 [1.02 TB]
Unallocated NVM Capacity:           0
Controller ID:                      1
Number of Namespaces:               1
Namespace 1 Size/Capacity:          1,024,209,543,168 [1.02 TB]
Namespace 1 Formatted LBA Size:     512
Local Time is:                      Mon Feb 26 00:21:09 2024 EET
Firmware Updates (0x12):            1 Slot, no Reset required
Optional Admin Commands (0x0017):   Security Format Frmw_DL *Other*
Optional NVM Commands (0x005d):     Comp DS_Mngmt Wr_Zero Sav/Sel_Feat *Other*
Maximum Data Transfer Size:         512 Pages
Warning  Comp. Temp. Threshold:     84 Celsius
Critical Comp. Temp. Threshold:     89 Celsius

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     8.80W       -        -    0  0  0  0        0       0
 1 +     7.10W       -        -    1  1  1  1        0       0
 2 +     5.20W       -        -    2  2  2  2        0       0
 3 -   0.0620W       -        -    3  3  3  3     2500    7500
 4 -   0.0620W       -        -    4  4  4  4     2500    7500

Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         2
 1 -    4096       0         1

=== START OF SMART DATA SECTION ===
Read NVMe SMART/Health Information failed: NVMe Status 0x2002


chabapok@chabapok-home:~$ sudo nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev  
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     50026B7686A52915     KINGSTON SKC3000S1024G                   1           1.02  TB /   1.02  TB    512   B +  0 B   EIFK31.6

chabapok
() автор топика
Последнее исправление: chabapok (всего исправлений: 1)
Ответ на: комментарий от DumLemming

… а после переключения в 4096 имеем такое отличие:

$ sudo nvme format --lbaf=1 /dev/nvme0n1
$ sudo smartctl -a /dev/nvme0n1 

...
Namespace 1 Formatted LBA Size:     4096
...

Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 -     512       0         2
 1 +    4096       0         1
...

$ sudo nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev  
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     50026B7686A52915     KINGSTON SKC3000S1024G                   1           1.02  TB /   1.02  TB      4 KiB +  0 B   EIFK31.6

При этом данные с диска слетают полностью и все сектора становятся заполнены нулями. А «Maximum Data Transfer Size» все равно остается в значении «512 Pages». Для меня это странновато, по моим представлениям должно было просесть в 8 раз. Видимо, это не те страницы. Ну да и ладно.

chabapok
() автор топика
Ответ на: комментарий от DumLemming

В дос было лучше

чем лучше? LBA логичней. Когда есть блин-цилиндр-головка-сектор, то трактовка фразы «последовательное чтение» не является однозначной. Только производитель железа знает, как оптимально сделать последовательное чтение.

chabapok
() автор топика