Так это делалось до :того, как вы просто «разрезали» диск на разделы, каждый из которых содержал файловую систему (, также известную как файлы и каталоги ).
/dev/sda1 => / from 0 to 12
/dev/sda2 => swap from 13 to 53
/dev/sda3 => /usr from 54 to 114
/dev/sda4 => /var from 115 to 156
free from 157 to end of disk
(номер псевдоблока)
Теперь проблема в том, что когда вы хотите увеличить, скажем, /usr
, вы будете перекрывать /var
. Имея свободное место после, но все еще нуждаясь в громоздком перемещении для расширения /usr
.
Теперь вся парадигма LVM настроена так, чтобы разрешить использование нескольких дисков и динамическое увеличение логического тома (и файловой системы, которая его поддерживает ).
Также имейте в виду, что логический том редко используется сам по себе, в большинстве случаев поверх него помещается файловая система (ext4
, xfs
и многие другие ).
Стек LVM (из физического в логический )выглядит так
Не является частью LVM:
Вот предлагаемое мной решение. Я взял ваш пример в качестве исходных данных. Идея:
(
и [
и {
и соответственно увеличьте «уровень отступа» #!/usr/bin/env bash
fileToReindent='./testFile'
indentCharacter='.'
countOccurrencesOfNeedleInHaystack() {
local needle=$1
local haystack=$2
echo "$haystack" | grep -o "$needle" | wc -l
}
makeIndentString() {
local indentCharacter=$1
local indentLevel=$2
python -c "print('$indentCharacter' * $indentLevel)"
}
# delete all existing indents
sed -ri 's/^ (.)$/\1/' "$fileToReindent"
# indent lines
indentLevelOfCurrentLine=0
indentLevelOfNextLine=0
while read line; do
for character in '(' '[' '{'; do
nb=$(countOccurrencesOfNeedleInHaystack "$character" "$line")
indentLevelOfNextLine=$((indentLevelOfNextLine+nb))
done
for character in ')' ']' '}'; do
nb=$(countOccurrencesOfNeedleInHaystack "$character" "$line")
indentLevelOfNextLine=$((indentLevelOfNextLine-nb))
done
indentString=$(makeIndentString "$indentCharacter" "$indentLevelOfCurrentLine")
indentLevelOfCurrentLine=$indentLevelOfNextLine
echo "$indentString$line"
done < "$fileToReindent"
NB :этот код является всего лишь доказательством концепции и все еще нуждается в доработке.
NB2 :проблемы с дополнительными пустыми строками в визуализируемом блоке кода. Правки приветствуются;-)
«Как написать скрипт» :вы разбиваете задачу на более мелкие шаги, которые легче перевести в код:
c
символов, длина которой составляет «нарастающее количество» символов