Azure 클라우드 Ubuntu 14.04 이미지( / 가 포함된 단일 파티션)를 가져와 루트 드라이브의 파일이 지원하는 논리 볼륨에 /var
있도록 재구성하려고 합니다./srv
(왜냐고 물으실 수도 있겠네요. 실제 서버가 부팅될 때 OS 디스크가 아닌 데이터 디스크로 데이터를 이동할 수 있도록 커스텀 데이터와 미리 로드된 데이터로 패키지 이미지를 만들고 있습니다.)
나는 다음을 수행하고 있습니다 :
dd bs=16384 count=1048576 if=/dev/zero of=/.img-loop0
sync
losetup /dev/loop0 /.img-loop0
pvcreate /dev/loop0
vgcreate data /dev/loop0
lvcreate -l 100%FREE data -n var
mkfs.ext4 -L var -E nodiscard /dev/data/var
echo "/dev/data/var /var ext4 defaults 1 1" >> /etc/fstab
cd /var
mount /var
echo Moving old /var to new /var
mv * /var
echo Moving /srv to /var/srv
mv /srv /var/
ln -s var/srv /
그럼 망해라local-bottom
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
log_begin_msg losetup beginning
if [ -f /root/.img-loop0 ]; then
#mount /root -o remount,nodiscard
losetup /dev/loop0 /root/.img-loop0
else
log_warning_msg No /root/.img-loop0
fi
log_end_msg losetup finished
모든 것이 정상으로 돌아왔을 때 다시 시작할 때까지 모두 잘 작동했습니다.
답변1
제가 저지른 실수는 루트 파일 시스템이 여전히 읽기 전용이었던 initramfs 중에 루프백 장치를 설정한 것이었습니다. 따라서 루프 장치에서 백업 파일에 변경 내용을 쓰려는 시도는 실패합니다.
/etc/init/lvmloop.conf
읽기-쓰기로 루트 파일 시스템을 다시 마운트하는 책임은 upstart/systemd/etc에 속하므로 이를 작동시키 려면 다음을 추가해야 했습니다 .
description "custom local LVM loopback device and setup"
start on mounted MOUNTPOINT=/
task
console output
script
LOOP0=/.img-loop0
if [ -f $LOOP0 ]; then
losetup /dev/loop0 $LOOP0 # set up loop device...
vgscan # scan for new PVs
vgchange -ay # activate VGs
vgmknodes -v # makes missing device nodes in /dev
mount /var # for some reason mountall fails to do this...
fi
end script
단계를 수동으로 수행할 필요가 없도록 한 곳에 배치할 수 있다면 "더 좋을" 것 같지만 적어도 작동합니다.