Comprobar el sistema de archivos:
e2fsck -f /dev/mapper/vg_livecd-lv_home
mejor hacer resize
/home en lugar deremove
Siga los pasos:
Step:1 Umount the file system
# umount /home/
Step:2 check the file system for Errors using e2fsck command.
# e2fsck -f /dev/mapper/vg_livecd-lv_home
Step:3 Reduce or Shrink the size of /home to required size.
# resize2fs /dev/mapper/vg_livecd-lv_home 50G
Step:4 Reduce the size using lvreduce command.
# lvreduce -L 50G /dev/mapper/vg_livecd-lv_home
Step:5 Check the filesystem before mount
# e2fsck -f /dev/mapper/vg_livecd-lv_home
Step:6 Mount the file system and verify its size.
# mount /home
-> Pasos para aumentar LVM:
Step1: Check the free available space in the Volume group
# vgdisplay < Volume-Group-Name>
Step2: Increase the size using Lvextend command
# lvextend -L +120G /dev/mapper/vg_livecd-lv_root
Step:3 Run the resize2fs command
# resize2fs /dev/mapper/vg_livecd-lv_root
Step:4 Verify Size
# df -Th
Было опубликовано более элегантное решение, но я думаю, что важно указать на некоторые ошибки, из-за которых исходный скрипт не работает, и как их исправить.
Во-первых, когда вы проверяете переменную package1
в цикле while, вам нужно поместить $
перед ней, чтобы считать фактические данные, хранящиеся в этой переменной.
Затем используйте [[...]]
вместо [...]
в тесте цикла while, так как это позволяет вам выполнять сопоставление с образцом, используя подстановочный знак *
. Однако это работает только в bash, а не в sh. См. этот ответ для подробного объяснения использования [[...]]
по сравнению с [...]
.
Наконец, вам не нужно передавать строку <<< package1
в конце цикла while.
Вот модифицированная версия вашего скрипта, которая работает так, как задумано.
#!/bin/bash
read -p "Enter zip file: " package1
while [[ "$package1" != *.zip ]]; do
read -p "Please enter file ending in '.zip': " package1
done
echo $package1
Сделайте это логически проще, исследуя только финальное расширение:
while [ "${package1##*.}" != "zip" ]
do
read -e -p "Specify a.zip file: " package1
done
echo $package1
Если вы хотите, чтобы пользователь выбирал один из существующих файлов, я бы использовал select
вместо read
, чтобы позволить пользователю выбирать из списка, вместо того, чтобы писать имя файла, которое он может точно не знать.
select package1 in *.zip; do
break;
done
echo "$package1"
Пользователю будет представлен список, и он должен ввести номер.
Никогда не заставляйте пользователя вводить пути к файлам в интерактивном режиме. Им будет проще вызывать ваш сценарий, используя пути к файлам Zip-архивов в командной строке сценария. Это позволяет им использовать средство завершения имени файла и шаблоны подстановки имен файлов в оболочке.
Сценарий будет вызываться с использованием, например,.
./myscript /some/path/myarchive.zip
или
./myscript folder/archive-*.zip
или аналогичный.
В сценарии вы бы сделали
#!/bin/bash
for archive_path do
printf 'Processing archive "%s"...\n' "$archive_path"
# code to process "$archive_path" goes here
done
Цикл в скрипте будет перебирать все аргументы, переданные в скрипт, и на каждой итерации "$archive_path"
будет путем к отдельному архиву, переданному в скрипт.
Нет необходимости проверять, заканчивается ли имя файла "$archive_path"
какой-либо конкретной строкой, поскольку инструменты, которые вы будете использовать для работы с архивом, могут даже не учитывать суффикс имени файла. Если они это сделают, то они потерпят неудачу с соответствующим кодом выхода, который вы легко можете перехватить :
if ! unzip "$archive_path"; then
printf 'Failed to run unzip on "%s"\n' "$archive_path" >&2
exit 1
fi
Если вы используете set -e
в скрипте (, вероятно, в качестве его первого оператора ), он будет автоматически завершаться, когда любая команда (, которая не является частью условного оператора ), возвращается с не -нулевой код выхода.
set -e
# The following would terminate the script if it failed:
unzip "$archive_path"
Относительно добавленного вами «редактировать» :То, что вы здесь делаете, — это внедрение инструмента просмотра файлов или файлового менеджера для выбора Zip-архивов. В зависимости от того, для чего вы на самом деле хотите использовать этот код, это может оказаться излишним.