LINUX.ORG.RU
решено ФорумAdmin

Fstab удаляются записи при перезагрузке.

 , ,


0

2

Доброго всем дня!

Не могу побороть fstab.
Исходные данные.
Vagrant, centos/7 - 1804.02
В процессе провиженинга гость два раза перезагружается.
Перед первым ребутом прописываются новые устройства в /etc/fstab.
Если сделать mount -a, то они успешно подмонтируются в систему.
Но после рестарта гостя записи о новых устройствах из fstab исчезают, соответственно, и и блочные устройства не подмонтируются.
Почему так происходит - не могу понять(
Вот выхлоп перед перезагрузкой

# /etc/fstab
# Created by anaconda on Sat May 12 18:50:26 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup00-LogVol00 /                       xfs     defaults        0 0
UUID=570897ca-e759-4c81-90cf-389da6eee4cc /boot                   xfs     defaults        0 0
/dev/mapper/VolGroup00-LogVol01 swap                    swap    defaults        0 0
UUID="f6b80411-1fc8-490e-a290-1197272d1471" /var ext4 defaults 0 0
UUID="e3c3d00c-2a55-4e01-a549-2706e27b454f" /home xfs defaults 0 0

А вот после перезагрузки

# /etc/fstab
# Created by anaconda on Sat May 12 18:50:26 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup00-LogVol00 /                       xfs     defaults        0 0
UUID=570897ca-e759-4c81-90cf-389da6eee4cc /boot                   xfs     defaults        0 0
/dev/mapper/VolGroup00-LogVol01 swap                    swap    defaults        0 0

Ответ на: комментарий от Nurmukh

Читал(
И даже пробовал прописать

cat > /etc/systemd/system/home.mount <<EOF
> [Unit]
> Description=Mount System Home Directory
> 
> [Mount]
> What=/dev/VolGroup00/LogVol_Home
> Where=/home
> Type=xfs
> Options=defaults
> 
> [Install]
> WantedBy=multi-user.target
EOF
systemctl enable home.mount
systemctl start home.mount

Перед перезагрузкой монтирование происходит.
После - нет ни подмонтированных устройств, ни изменений во fstab, ни самого файла /etc/systemd/system/home.mount
Думал, что это чудит SELinux, но отключение его ни на что не повлияло…

HerrMamont
() автор топика

Приложу, пожалуй, вагрантфайл и скрипты, вдруг в них что-то напутал?

# -*- mode: ruby -*-
# vim: set ft=ruby :
home = ENV['HOME']
ENV["LC_ALL"] = "en_US.UTF-8"

MACHINES = {
  :lvm => {
        :box_name => "centos/7",
        :box_version => "1804.02",
        :ip_addr => '192.168.56.101',
    :disks => {
        :sata1 => {
            :dfile => home + '/VirtualBox VMs/sata1.vdi',
            :size => 10240,
            :port => 1
        },
        :sata2 => {
            :dfile => home + '/VirtualBox VMs/sata2.vdi',
            :size => 2048, # Megabytes
            :port => 2
        },
        :sata3 => {
            :dfile => home + '/VirtualBox VMs/sata3.vdi',
            :size => 1024, # Megabytes
            :port => 3
        },
        :sata4 => {
            :dfile => home + '/VirtualBox VMs/sata4.vdi',
            :size => 1024,
            :port => 4
        }
    }
  },
}

Vagrant.configure("2") do |config|

    config.vm.box_version = "1804.02"
    MACHINES.each do |boxname, boxconfig|
      config.vm.synced_folder ".", "/vagrant", disabled: true
  
        config.vm.define boxname do |box|
            #box.cpus = 4
  
            box.vm.box = boxconfig[:box_name]
            box.vm.host_name = boxname.to_s
            box.vbguest.installer_hooks[:before_install] = ["yum install -y epel-release", "sleep 1"]
            box.vbguest.installer_options = { allow_kernel_upgrade: false , enablerepo: true }
  
            
            box.vm.network "private_network", ip: boxconfig[:ip_addr]
            box.vm.allow_fstab_modification = false
  
            box.vm.provider :virtualbox do |vb|
                    vb.customize ["modifyvm", :id, "--memory", "4096"]
                    vb.customize ["modifyvm", :id, "--cpus", "4"]
                    needsController = false
            boxconfig[:disks].each do |dname, dconf|
                unless File.exist?(dconf[:dfile])
                  vb.customize ['createhd', '--filename', dconf[:dfile], '--variant', 'Fixed', '--size', dconf[:size]]
                                  needsController =  true
                            end
  
            end
                    if needsController == true
                       vb.customize ["storagectl", :id, "--name", "SATA", "--add", "sata" ]
                       boxconfig[:disks].each do |dname, dconf|
                           vb.customize ['storageattach', :id,  '--storagectl', 'SATA', '--port', dconf[:port], '--device', 0, '--type', 'hdd', '--medium', dconf[:dfile]]
                       end
                    end
            end
  
        
          box.vm.provision "shell", path: "./step1.sh"
          
          box.vm.provision "shell", reboot: true

          box.vm.provision "shell", path: "./step2.sh"
          box.vm.provision "shell", reboot: true
          box.vm.provision "shell", inline: <<-SHELL
            echo "Посмотрим диски после второго ребута"
            lsblk
            echo "Посмотрим, что в fstab"
            cat /etc/fstab
          SHELL

          end        
    end
  end
  

step1.sh

#!/bin/bash

#приступаем
mkdir -p ~root/.ssh
cp ~vagrant/.ssh/auth* ~root/.ssh
yum install -y mdadm smartmontools hdparm gdisk mc xfsdump lvm2
echo "Посмотрим диски"
lsblk
echo "Посмотрим существующие Физические тома"
sudo pvscan
echo "Посмотрим существующие Группы томов"
sudo vgscan
echo "Посмотрим существующие Логические тома"
sudo lvscan
echo "Посмотрим целевой Логический том"
sudo lvdisplay /dev/VolGroup00/LogVol00
echo "Попробуем размонтировать /dev/VolGroup00/LogVol00"
sudo umount /dev/VolGroup00/LogVol00
echo "Размонтировать не получилось поэтому попробуем его перенести на другой PV"
sudo fdisk -l
echo "Инициализируем самый крупный Физическиq том"
sudo pvcreate /dev/sdb
echo "Посмотрим, к какой Группе томов его прикрепить"
sudo pvdisplay
echo "Цепляем к новой группе VolGroup01"
sudo vgcreate VolGroup01 /dev/sdb
echo "Посмотрим что получилось"
sudo pvdisplay
echo "Создадим подменный том"
sudo lvcreate -n LogVol01 -l +100%FREE /dev/VolGroup01
echo "Создадим файловую систему XFS"
sudo mkfs.xfs /dev/VolGroup01/LogVol01
echo "Создадим подменный том"
sudo mount /dev/VolGroup01/LogVol01 /mnt
echo "Смотрим расположение корневого раздела"
sudo lvdisplay
echo "Сдампим содержимое текущего корневого раздела в наш временный"
sudo xfsdump -J - /dev/VolGroup00/LogVol00 | sudo xfsrestore -J - /mnt
echo "Подмонтируем в chroot каталоги"
mount --bind /proc/ /mnt/proc/
mount --bind /sys/ /mnt/sys/
mount --bind /dev/ /mnt/dev/
mount --bind /run/ /mnt/run/
mount --bind /boot /mnt/boot/
echo "Посмотрим монтирование"
mount
echo "Заходим в окружение chroot нашего временного корня"
chroot /mnt/ /bin/bash << EOT
grub2-mkconfig -o /boot/grub2/grub.cfg
cd /boot ; for i in `ls initramfs-*img`; do dracut -v $i `echo $i|sed "s/initramfs-//g; s/.img//g"` --force; done
sed -i 's|rd.lvm.lv=VolGroup00/LogVol00|rd.lvm.lv=VolGroup01/LogVol01|g' /boot/grub2/grub.cfg
exit
EOT

echo "Посмотрим диски перед первым ребутом"
lsblk
HerrMamont
() автор топика

step2.sh

#!/bin/bash

echo "Посмотрим статус SELinux"
sestatus
echo "Отключим SELinux"
setenforce 0
echo "Посмотрим статус SELinux снова"
sestatus
echo "Посмотрим диски после первого ребута"
lsblk
echo "удаляем старый LV в 40G"
lvremove -y /dev/VolGroup00/LogVol00
echo "Смотрим расположение корневого раздела"
sudo lvdisplay
echo "создаем новый на 8G"
lvcreate -y -n LogVol00 -L 8G VolGroup00
echo "Смотрим, что получилось"
sudo lvdisplay
echo "Создадим ФС на разделе"
mkfs.xfs /dev/VolGroup00/LogVol00
echo "Подмонтируем"
mount /dev/VolGroup00/LogVol00 /mnt
echo "Сдампим root"
xfsdump -J - /dev/VolGroup01/LogVol01 | xfsrestore -J - /mnt
echo "Подмонтируем в chroot каталоги"
for i in /proc/ /sys/ /dev/ /run/ /boot/; do mount --bind $i /mnt/$i; done

echo "Заходим в окружение chroot нашего временного корня"
chroot /mnt/ /bin/bash << EOT
grub2-mkconfig -o /boot/grub2/grub.cfg
cd /boot ; for i in `ls initramfs-*img`; do dracut -v $i `echo $i|sed "s/initramfs-//g; s/.img//g"` --force; done
sed -i 's|rd.lvm.lv=VolGroup01/LogVol01|rd.lvm.lv=VolGroup00/LogVol00|g' /boot/grub2/grub.cfg
exit
EOT

echo "Создаем зеркало"
pvcreate /dev/sdc /dev/sdd
echo "Посмотрим Группы томов"
sudo pvdisplay
vgcreate vg_var /dev/sdc /dev/sdd
echo "Посмотрим что получилось"
sudo vgdisplay
echo "Посмотрим, что создалось в итоге"
lsblk
echo "Создаем логический том под var"
lvcreate -y -n lv_var -L 950M -m1 vg_var
echo "Создаем на нем ФС"
mkfs.ext4 /dev/vg_var/lv_var
echo "Перемещаем туда /var"
mount /dev/vg_var/lv_var /mnt
echo "сохраняем содержимое старого var"
mkdir /tmp/oldvar && mv /var/* /tmp/oldvar
echo "монтируем новый var в каталог /var"
umount /mnt
mount /dev/vg_var/lv_var /var
echo "Правим fstab для автоматического монтирования /var"
echo "`blkid | grep var: | awk '{print $2}'` /var ext4 defaults 0 0" >> /etc/fstab
echo "Создаем логический том под home"
lvcreate -n LogVol_Home -L 2G /dev/VolGroup00
echo "Создаем на нем ФС"
mkfs.xfs /dev/VolGroup00/LogVol_Home
mount /dev/VolGroup00/LogVol_Home /mnt/
cp -aR /home/* /mnt/
rm -rf /home/*
umount /mnt
mount /dev/VolGroup00/LogVol_Home /home/
echo "Правим fstab для автоматического монтирования /home"
echo "`blkid | grep Home | awk '{print $2}'` /home xfs defaults 0 0" >> /etc/fstab
echo "Сгенерируем файлы в /home/"
touch /home/file{1..20}
echo "Посмотрим файлы в /home/"
ls /home/
echo "Снимаем снапшот"
lvcreate -L 100MB -s -n home_snap /dev/VolGroup00/LogVol_Home
echo "Удаляем часть файлов"
rm -f /home/file{11..20}
echo "Посмотрим файлы в /home/"
ls /home/
echo "Восстановливаем со снапшота"
umount /home
lvconvert --merge /dev/VolGroup00/home_snap
mount /home
echo "Посмотрим файлы в /home/"
ls /home/
echo "Посмотрим, что подмонтировалось"
mount
echo "Посмотрим, что в fstab"
cat /etc/fstab
echo "Посмотрим диски"
lsblk

cat > /etc/systemd/system/home.mount <<EOF
> [Unit]
> Description=Mount System Home Directory
> 
> [Mount]
> What=/dev/VolGroup00/LogVol_Home
> Where=/home
> Type=xfs
> Options=defaults
> 
> [Install]
> WantedBy=multi-user.target
EOF
echo "Включим и подмонтируем Home"
systemctl enable home.mount
#systemctl start home.mount
echo "Посмотрим диски перед вторым ребутом"
lsblk
echo "Посмотрим опять, что подмонтировалось"
mount
HerrMamont
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Сделал

echo "Правим fstab для автоматического монтирования /home"
echo "`blkid | grep Home | awk '{print $2}'` /home xfs defaults 0 0" >> /etc/fstab
echo "Сделаем systemctl daemon-reload"
systemctl daemon-reload

К сожалению, ничего не поменялось(

HerrMamont
() автор топика
Ответ на: комментарий от HerrMamont

Виновник - я сам)
Сначала скидываю дамп временного рута в постоянный рут, а затем произвожу запись изменений в текущий (временный) рут.
А так как гружусь я после ребута в постоянный рут, то все изменения из временного становятся недоступны

HerrMamont
() автор топика