Как я могу расширить /dev/sda6 — возможно ли это?

Вот упрощенный тестовый пример:

trap '
        trap    - HUP EXIT || exit "$?"
        kill -s HUP    "$$" || exit "$?" ' HUP INT
kill -HUP $$
$ dash dash-bug
dash-bug: 3: /home2/ahq/dash-bug: Syntax error: EOF in backquote substitution

Изменение длины или содержимого цитируемого кода может либо «исправить» ошибку, либо привести к другим интересным искажениям, когда случайные байты появляются из ниоткуда.

Это было вызвано использованием -после -бесплатной ошибки, которая была исправлена, начиная с dash 0.5.9, но все еще присутствует в dash 0.5.8 из стабильной версии Debian 9.8 (stretch ), Ubuntu 18.04 (бионический )и Ubuntu 18.10 (космический ).

Это коммит , в котором это исправлено:

commit 6c3f73bc536082fec38bd36e6c8a121033c68835
Author: Herbert Xu 
Date:   Thu Oct 2 08:26:06 2014 +0800

    [EVAL] Fix use-after-free in dotrap/evalstring

    The function dotrap calls evalstring using the stored trap string.
    If evalstring then unsets that exact trap string then we will end
    up using freed memory.

    This patch fixes it by making evalstring always duplicate the string
    before using it.

    Signed-off-by: Herbert Xu 

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

sighandler(){
    trap - "$sig" EXIT || exit "$?"
    kill -s "$sig" "$$" || exit "$?"
}
for sig in HUP INT QUIT ALRM TERM; do
    trap "sig=$sig; sighandler" "$sig"
done

kill -s HUP "$$"

-1
03.10.2020, 13:38
1 ответ

Ваши /dev/sda[1-7]не являются логическими томами LVM, а являются обычными традиционными разделами диска.

Каждый раздел всегда должен представлять собой одну группу последовательных дисковых блоков на одном диске. Расширение раздела возможно только в его хвостовой части :, если раздел занимает блоки X..Y, вы можете расширить его, чтобы охватить блоки X.. (Y+N )-, но только если блоки (Y +1 )... (Y+N )все свободны.

В вашем случае sda6заканчивается в блоке #280764415, а sda7начинается в блоке #280766464. И sda7, кажется, продолжается до конца диска. Таким образом, без предварительного удаления или сжатия sda7вы можете расширить sda6только на (280766464 -1)-280764415 = 2048 блоков, или, другими словами, ровно на 1 МБ. Это так мало, что в большинстве случаев не стоит заморачиваться.

Если вы сжимаете sda7, сжатие раздела также происходит в его хвостовой части. Таким образом, после сжатия раздела вам также придется переместить его в конец диска. Перемещение раздела требует его размонтирования, а поскольку перемещение требует интенсивной записи -, это займет некоторое время... поэтому потребуется некоторое время простоя приложения.

Если sda6не является вашей корневой файловой системой, я бы посоветовал вам вместо этого:

  1. добавить новый диск к виртуальной машине,
  2. подготовьте его как физический том LVM (pvcreate),
  3. добавьте его в ту же группу томов LVM, что и ваш sdb1диск, возможно, уже используется vgextend(, если только вы не знаете, что вам потребуется переместить sdb1на другой компьютер/ВМ отдельно от нового диска позже, в в этом случае создайте новую группу томов для нового диска с vgcreate),
  4. создать на нем логический том LVM (lvcreate),
  5. mkfsлогический том, использующий предпочтительный тип файловой системы,
  6. смонтировать его во временном месте,
  7. скопируйте в него содержимое sda6(cp -aт.к. root в большинстве случаев работает хорошо ),
  8. размонтировать sda6и смонтировать новый логический том LVM в ту же точку монтирования sda6, которая была занята ранее. Отредактируйте /etc/fstab, чтобы ваш новый логический том LVM автоматически монтировался в предыдущее местоположение sda6при каждой перезагрузке с этого момента.

Убедившись, что все успешно скопировано, вы можете преобразовать sda6в другой физический том LVM, а затем использовать его для дальнейшего расширения группы томов LVM (с помощьюvgextend). Это позволит вам использовать пространство для последующего расширения любых существующих логических томов в той же группе томов(lvextend)или для создания одного или нескольких новых логических томов (lvcreate), если это необходимо.

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

2
18.03.2021, 23:00

Теги

Похожие вопросы