Вы можете использовать блоки для преобразования /dev/sdb
в физический том LVM с файловой системой данных , помещенной в логический том LVM. Как только файловая система данных окажется в логическом томе LVM, вы сможете сжать ее, а затем выделить освободившееся пространство для /var
, если логический том /var
не использует непрерывное выделение.
Предупреждение :При таких операциях с дисками целостность данных никогда не гарантируется. Хотя данные не должны быть уничтожены при выполнении этой процедуры, я настоятельно рекомендую сделать резервную копию, прежде чем продолжить. Вы просто никогда не знаете, что может случиться.
umount /mnt/data
. blocks to-lvm --join=VOLGROUP /dev/sdb
lvs
, чтобы получить имя нового LV. /etc/fstab
так, чтобы /mnt/data
монтировался из нового LV.lvresize -r -L -20G /dev/VOLGROUP/NAME_OF_NEW_LV
lvresize -r -L +20G /dev/VOLGROUP/var
mount /mnt/data
Всегда можно:
unset -v log
# or
log=true
([ -z "$log" ] || exec >> file1; somecommand arg1 arg2)
([ -z "$log" ] || exec >> file2; somecommand arg1 arg2)
Или:
if [ -n "$log" ]; then
exec 3>> file1 4>> file2
else
exec 3>&1 4>&1
fi
somecommand arg1 arg2 >&3
somecommand arg1 arg2 >&4
или:
log() {
local output="$1"; shift
if [ -n "$output" ]; then
"$@" >> "$output"
else
"$@"
fi
}
log "${log+file1}" somecommand arg1 arg2
log "${log+file2}" somecommand arg1 arg2
Или (убедитесь, что данные, передаваемые в eval
, не являются динамическими, чтобы избежать уязвимостей внедрения кода, поэтому используйте одинарные кавычки ниже, внутри которых не происходит расширения):
eval ${log+'>> file1'} 'somecommand arg1 arg2'
eval ${log+'>> file2'} 'somecommand arg1 arg2'
Сzsh
:
if (($+log)); then
alias -g 'log?=>>'
else
alias -g 'log?=#'
fi
somecommand arg1 arg2 log? file1
somecommand arg1 arg2 log? file2
Или даже (, если вы не собираетесь использовать >>
для чего-либо, кроме условного ведения журнала):
(($+log)) || alias -g '>>=#'
somecommand arg1 arg2 >> file1
somecommand arg1 arg2 >> file2
bash
не имеет alias -g
, не позволяет вам использовать псевдонимы, такие как >>
, но вы можете использовать простые alias
es, если вы переместите перенаправление в начало:
shopt -s expand_aliases
skip_one() { shift; "$@"; }
if [[ -v log ]]; then
alias 'log?=>>'
else
alias 'log?=skip_one'
fi
log? file1 somecommand arg1 arg2
log? file2 somecommand arg1 arg2