Назад | Перейти на главную страницу

Изменение размера раздела / var в удаленной системе (Linux Debian Lenny)

На сервере, к которому у меня есть доступ только через ssh и vnc (что означает невозможность загрузки с "живого" CD / DVD), я хотел бы уменьшить раздел, назначенный / var (чтобы освободить место для дополнительная перегородка). Какой хороший и безопасный способ сделать это?

Решение (на основе ответа Дэвида Спиллета, при условии, что у вас достаточно места на / для размещения копии / var):

  1. остановить все, что использует / var, где это возможно
  2. remount / var только для чтения для хорошей оценки mount -f -oremount, ro / var (похоже, на меня это не повлияло)
  3. скопируйте / var в / под другим именем с помощью mkdir / vartmp; cp -av / var / * / vartmp /
  4. закомментируйте запись для / var в / etc / fstab
  5. перезагрузка
  6. перемещайте вещи с помощью mv / var / varmount; мв / вартмп / вар
  7. перезагрузка, раздел
  8. раскомментируйте запись для / var в / etc / fstap
  9. перезагрузка

Если у вас есть место в корневом разделе для содержимого / var, вы можете:

  1. остановить все, что использует /var где возможно
  2. remount / var только для чтения для удобства mount -f -oremount,ro /var
  3. копировать /var к / под другим именем с mkdir /vartmp; cp -av /var/* /vartmp/
  4. перемещать вещи с помощью mv /var /varmount; mv /vartmp /var
  5. закомментировать запись для /var в /etc/fstab
  6. перезагрузка

Теперь у вас должно быть /var на своем корневом разделе, а не на своем. Теперь вы можете изменить размер старого раздела по мере необходимости. Шаг 4 должен позволить вам переименовать /var каталог, даже если он используется как точка монтирования и в противном случае занят (и работает с открытыми файлами, там будет отслеживаться изменение, поскольку открытые файлы не упоминаются по пути + имени, а вместо этого по индексу после открытия).

Если у вас нет места на / но делай дальше /someotherfs тогда вы можете попробовать переместить его туда с помощью символической ссылки в / вот так:

  1. остановить все, что использует /var где возможно
  2. remount / var только для чтения для удобства mount -f -oremount,ro /var
  3. копировать /var с участием cp -av /var /someotherfs/var
  4. перемещать вещи с помощью mv /var /varmount; ln -s /someotherfs/var /var
  5. закомментировать запись для /var в /etc/fstab
  6. перезагрузка

Это немного более рискованно, так как вы должны быть уверены, что /someotherfs устанавливается до /var при загрузке.

Если у вас нет места, куда вы хотите временно скопировать его, вы можете уменьшить размер /var удалив такие вещи, как кешированные пакеты (aptitude clean в настройках стиля Debian, без сомнения, эквивалент yum команда), удаляя другие вещи (например, Debian сохраняет httpdocs по умолчанию в /var/www поэтому, если он все еще там и у вас много данных, переместите его в другой раздел) и удалите файлы из /var/log которые появились не совсем недавно (сначала сделайте резервную копию, на случай, если вам понадобится обратиться к ним позже).

Как говорит Зоредак: что бы вы ни делали, убедитесь, что вас устраивает резервная копия, прежде чем продолжить.

Предостережение: все вышесказанное по памяти, нигде не тестировал, следите на свой страх и риск!

Традиционный способ - загрузка в однопользовательском режиме. Туда, /var даже не будет смонтирован по умолчанию, так что вы можете возиться с ним сколько угодно.

Если у вас есть доступ к консоли (например, клавиатура-видео-мышь через Ethernet), вы можете:

  1. init 1 (и дайте root-пароль)
  2. может быть systemctl stop systemd-timesyncd требуется, только если вы его используете
  3. umount /var
  4. e2fsck /dev/volume-where-var-is-in-your-system
  5. resize2fs /dev/volume... к чему угодно (в моем случае я хотел уменьшить его, поэтому я использовал -M)
  6. делать больше вещей (lvresize или что угодно)

затем перезагрузите

  1. остановить любые службы, которые могут использовать var (lsof | grep "/ var")
  2. umount / var
  3. усадка / вар
  4. перемонтировать / var
  5. перезапустите службы, на которых вы остановились 1.

Один пользователь - самая безопасная ставка:

Эти инструкции касаются изменения размера var LV / FS в системе Red Hat 7.x.

Проведите инвентаризацию перед переходом в однопользовательский режим:

# df -h /var
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg00-var   13G  6.2G  5.9G  52% /var

# vgs
  VG         #PV #LV #SN Attr   VSize   VFree
  vg00         1   7   0 wz--n- <39.51g <2.63g

# lvs | grep var
  var      vg00       -wi-ao---- <12.86g

Загрузитесь в однопользовательском режиме, соответствующем используемой вами платформе.

ПРИМЕЧАНИЕ: система будет доступна через / sysroot.

Активировать vg00:

# lvm vgchange -ay vg00

Восстановите файлы устройства LV:

# lvm vgmknodes -vv

# e2fsck -f /dev/vg00/var

На всякий случай уменьшим FS до 8 ГБ, а затем LV до 8,5 ГБ (с последующим изменением размера FS, чтобы заполнить его):

# /sysroot/sbin/resize2fs -p /dev/vg00/var 8G

Некоторая математика изменения размера:

VG PE size: PE Size 4.00 MiB

4M * 1024K = 4096K

8.5G * 1024K * 1024K = 8,912,896K

8,912,89 / 4096 = 2176 PEs

ПРИМЕЧАНИЕ. Первоначально я получил следующую ошибку, и мне пришлось вручную переопределить lock_type: «Тип блокировки только для чтения. Блокировки записи запрещены».

# grep locking_type /etc/lvm/lvm.conf
locking_type = 4

Уменьшить LV:

# lvm lvreduce -l 2176 /dev/vg00/var --config 'global {locking_type=1}'

Повторно выполните изменение размера, чтобы заполнить контейнер LV до 8,5 ГБ:

# /sysroot/sbin/resize2fs /dev/vg00/var

Подтвердите новый размер с помощью:

# lvm lvs

# reboot