Как рассчитать значения fdisk

Вопрос или проблема

Как рассчитать значения fdisk

Я пытаюсь продолжать понимать своп на отдельном разделе. Такой же сценарий, как в старом вопросе

Я хочу узнать, как правильно рассчитать параметр для команды fdisk, чтобы подготовить именно 2 ГБ свопа. Я ввел правильный параметр, но не понимаю, как это общее вычисление провести.

Команда (m для помощи): n
Тип раздела:
   p   основной (0 основных, 0 расширенных, 4 свободно)
   e   расширенный
Выберите (по умолчанию p): 
Используется значение по умолчанию p
Номер раздела (1-4, по умолчанию 1): 
Первый сектор (2048-536870911, по умолчанию 2048): 
Используется значение по умолчанию 2048
Последний сектор, +сектора или +размер{K,M,G} (2048-536870911, по умолчанию 536870911): 4196366
Раздел 1 типа Linux размером 2 GiB установлен

Теперь с параметром 4196366 размер свопа ровно 2 ГБ

>>free | grep -i swap | awk '{print "scale=2; "$2" / 1024 / 1024" }' | bc -l
2.00

Вопрос в том, как рассчитать 4196366. Я думал так:

4196366 = 2 * 2 * 1024^2 + 2 * 1024 + 14

Так что 2*1024, вероятно, для того, чтобы пропустить первый сектор. Но почему мне нужно умножать 2 ГБ на 2 и что за магическая константа 14? Как мне общее понять, что нужно передать как аргумент для fdisk?

Я не знаю, почему этот ответ был удален, но я вставлю его обратно:

Входные данные в секторах, и большинство дисков работают либо с логическими секторами размером 512 байт, либо 4096 байт. (512 — это традиционный размер, и многие 4K-диски тоже эмулируют его.) Fdisk сообщит вам о логическом размере сектора диска при старте.

Иными словами, вам нужно умножить на 2, потому что один сектор — 512 байт, то есть половина килобайта.

Так что если вам нужно 2 гигабайта свопа, плюс X килобайт для заголовка свопа, проще всего сначала преобразовать оба значения в байты, а затем разделить сумму на размер сектора (512 или 4096), чтобы получить количество секторов:

swap_bytes = 2 * 1024 * 1024 * 1024
hdr_bytes = X * 1024

sector_size = 512
part_sectors = (swap_bytes + hdr_bytes) / sector_size

(Округляйте в большую сторону.)

Полезные инструменты:

$ echo 2G | numfmt --from=si
2000000000

$ echo 2G | numfmt --from=iec
2147483648

Ответ или решение

Для расчета значений fdisk для подготовки раздела под swap размером ровно 2 ГБ необходимо учитывать, что входные данные представляют собой количество секторов, а не байтов. Большинство дисков используют логический размер сектора в 512 байт или 4096 байт. Для начала, вам нужно будет определить, какой размер сектора использует ваш диск. Команда fdisk показывает размер сектора при запуске.

Шаги для расчета значений fdisk:

  1. Определите размер swap в байтах:
    Чтобы создать swap раздел размером 2 ГБ, необходимо преобразовать это значение в байты:
    [
    \text{swap_bytes} = 2 \, \text{ГБ} = 2 \times 1024 \times 1024 \times 1024 = 2147483648 \, \text{байт}
    ]

  2. Определите заголовок (если необходимо):
    В некоторых случаях может потребоваться указать дополнительное количество байтов для заголовка swap. Если, например, вы используете 16 КБ для заголовка, вам нужно будет преобразовать это значение в байты:
    [
    \text{hdr_bytes} = 16 \, \text{КБ} = 16 \times 1024 = 16384 \, \text{байт}
    ]

  3. Определите размер сектора:
    Проверить размер сектора можно с помощью команды fdisk, в зависимости от конфигурации вашего диска это может быть либо 512 байт, либо 4096 байт.

  4. Рассчитайте общее количество байт, необходимых для раздела:
    Сложите байты для swap и заголовка:
    [
    \text{total_bytes} = \text{swap_bytes} + \text{hdr_bytes}
    ]

  5. Переведите байты в сектора:
    Разделите общее количество байт на размер сектора:
    [
    \text{part_sectors} = \frac{\text{total_bytes}}{\text{sector_size}}
    ]
    Если размер сектора 512 байт, например, выражение будет выглядеть как:
    [
    \text{part_sectors} = \frac{2147483648 + 16384}{512} = 4196352
    ]
    В случае 4096 байт:
    [
    \text{part_sectors} = \frac{2147483648 + 16384}{4096} = 524288
    ]

  6. Округлите значение:
    Важно округлить значение вверх, чтобы гарантировать, что размер раздела включает всю выделенную область.

Пример:

Пусть вы хотите создать swap размером 2 ГБ с использованием 512-байтовых секторов и заголовка 16 КБ.

[
\text{swap_bytes} = 2147483648 \, \text{байт}
]
[
\text{hdr_bytes} = 16384 \, \text{байт}
]
[
\text{total_bytes} = 2147483648 + 16384 = 2147500032 \, \text{байт}
]
[
\text{part_sectors} = \frac{2147500032}{512} = 4196352 \, \text{сектора}
]

Таким образом, вы должны использовать 4196352 в качестве последнего сектора в вашей команде fdisk для создания раздела swap.

Полезные инструменты:

Вы также можете использовать команды для преобразования значений, как показано ниже:

$ echo 2G | numfmt --from=si
2147483648
$ echo 16K | numfmt --from=si
16384

Таким образом, вы сможете корректно рассчитать значение для fdisk и создать необходимый раздел под swap.

Оцените материал
Добавить комментарий

Капча загружается...