플래시 드라이브에 영구적으로 Ubuntu Server 설치


20

우선, 나는이 게시물이 무엇에 관한 것이 아닌지 이해하고 싶었습니다.

내가하려는 것은 USB 스틱 또는 CF 카드에서 부팅하는 홈 NAS (파일) 서버가있는 것입니다. 이 게시물의 시점에서 플래시 드라이브가 어떻게 연결되어 있는지 (USB, IDE, 다른 방법) 관련이 없습니다. 전체 운영 체제 설치를 부팅하고 플래시 드라이브에서 실행하고 싶습니다. 이 유형의 설치를 구체적으로 원하는 이유는 다음과 같습니다. 운영 체제의 백업 사본을 쉽게 만들 수 있기를 원합니다 (플래시 이미지). 운영 체제를 즉시 교체하고 부팅 할 수 있는지 확인하고 싶습니다 (플래시 드라이브를 교체하여) ), 파일 서버의 드라이브를 OS와 별도로 교체 할 수 있기를 원합니다.

플래시 드라이브를 ext2로 포맷하고 설치하는 것이 가능하다는 것을 알고 있습니다. 내가 찾고있는 것은보다 강력한 솔루션을 만들기위한 권장 사항입니다. 내가하고 싶은 몇 가지 항목이 있습니다.

  • 루트 파티션을 YAFF2 또는 LogFS 또는 플래시 드라이브 용으로 특별히 설계된 다른 파일 시스템으로 구성하십시오.
  • 쓰기를 최소화하도록 기본 OS를 재구성합니다 (/ tmp 등의 ramfs)

추천을 제출하십시오. 우분투가 그러한 시나리오에 실제로 적용 가능한지 궁금합니다 ...

나는 나의 목표를 조금 명확히하고 싶다. 일반 SSD 드라이브에는 새로운 섹터에 대한 쓰기를 지속적으로 재 할당하는 등의 트릭을 사용하여 드라이브를 오랫동안 유지하는 펌웨어가 있습니다. USB 스틱에는 그러한 펌웨어가 없으므로 일반 파일 시스템을 사용하면 빠르게 죽일 수 있습니다. 플래시 용으로 설계된 파일 시스템을 사용하여 SSD 펌웨어를 에뮬레이트 할 수 있는지 찾고 있습니다. 어떤 의미에서는 USB 드라이브가 실제 SSD 인 것처럼 일반적인 방식으로 시스템을 실행할 수 있도록하기 위해 노력하고 있습니다.


1
몇 시간 안에 +1 질문을했습니다.
Bruno Pereira

1
링크 된 답변의 일부 정보, 특히 noatime드라이브에 쓰지 않는 플래그 및 기타 트릭 이 관련 됩니다. 실제로 귀하의 질문은 플래시 드라이브에 설치하는 것이 아니라 (답변하기 때문에) 드라이브 쓰기를 최소화하는 방법에 관한 것입니다.
Huckle

@ 허클 더 포괄적 인 답변을 선호합니다. 플래시 드라이브에 최적화 된 방식으로 OS를 실행하고 싶습니다. 쓰기를 최소화하는 것이 그 일부이지만 답이 아닙니다. 내가 특별히 타겟 드라이브 플래시 파일 시스템을 사용하여 OS를 실행하고 싶습니다
galets

그냥 시도해 보지 않겠습니까? 이 방법으로 Linux를 정상적으로 설치했으며 정상적으로 작동합니다.
bntser

에 대해 간단하게 USB로 부팅하지 @bntser이된다
galets

답변:


1

LVM을 사용하십시오 . 이 경우 스냅 샷 ( 시스템의 인스턴트 클론)을 사용하여 전체 시스템을 쉽게 복사하거나 플래시 드라이브간에 마이그레이션 할 수 있습니다 *.

당신이하려는 경우 그리고 일종의 "마모 균등화"의 , 당신은 사용할 수 의 USB에 루트 파일 시스템에 대한 AUFS를 플래시. 따라서 YAFF2 등을 사용할 필요가 없습니다. ext4가 좋습니다.

* 그러나 / boot 는 항상 수동으로 복사해야하며, grub / disk의 UUID 를 수정해야합니다 . 루트 볼륨의 크기를 USB 플래시 크기 로 조정 하려면 복구 CD가 필요합니다 . 그리고 grub을 깨뜨릴 경우이 매뉴얼을 읽으십시오 .

나는 그것을 위한 매뉴얼 을 썼다 .


답변 주셔서 감사하지만 aufs는 어떻게 마모 레벨링을 해결합니까? 나는 그것이 어떤 징후도 보지 않는다
galets

일종의 "웨어 레벨링"을 의미합니다. Aufs는 USB 플래시 드라이브를 저장하는 데 도움이됩니다. 실제로 FlashDrive는 읽기 전용이되고 모든 쓰기 / 변경은 RAM 메모리에 저장됩니다.
BBK

잠시 기다리십시오. 버그를 수정 한 후 lvm 루트 크기 조정 + Flash Drive + aufs 로의 마이그레이션을 완료하기 위해 완전한 guid를 추가하겠습니다. 나도 홈 NAS 서버를 만들고 있습니다.
BBK

4

LVM이있는 HDD에서 Ubuntu를 사용하는 경우 (Ubuntu Server는 기본적으로 LVM을 사용합니다).

이 스크립트는 다음 응용 프로그램을 사용하여 Ubuntu Oneiric 11.10 x86_64 3.0.0-16 서버에서 테스트되었습니다.

LVM version:     2.02.66(2) (2010-05-20)
Library version: 1.02.48 (2010-05-20)
Driver version:  4.20.0
grub-install (GRUB) 1.99-12ubuntu5
aufs - advanced multi layered unification filesystem. version 2.1-standalone.tree-3.0-rcN-20110620

1 단계. 루트 FS 를 FlashDrive 크기 이하로 줄이십시오. 루트 FS 크기가 FlashDrive와 같거나 작은 경우이 단계를 건너 뛰십시오.

Resc CD로 부팅하여 루트 파티션을 마운트하십시오. 다음 명령을 실행하십시오.

#make the kernel realize the LVM volumes are there
lvm vgchange -a y

#Before shrinking the file system, it is good practice to check it is all in order.
# Change /dev/ubuntu/root with your root lvm partition
e2fsck -f /dev/ubuntu/root

#After the check, resize2fs can be used to shrink the file system on the LVM volume
# Change /dev/ubuntu/root with your root lvm partition. Replace 6G with your FlashDrive capacity-500Mb
resize2fs -f -p /dev/ubuntu/root 6G
#The e2fsck check command could be run again to make sure the, now significantly smaller, root file system is OK.
# Change /dev/ubuntu/root with your root lvm partition. Replace 6G with your FlashDrive capacity-500Mb
resize2fs -f -p /dev/ubuntu/root 6G

#The lvreduce command reduces the size of LVM volumes.
# Change /dev/ubuntu/root with your root lvm partition. Replace 6G with your FlashDrive capacity-500Mb
lvm lvreduce -L6G /dev/ubuntu/root

#you resided root partition !
reboot

2 단계. FlashDrive 준비 : 마이그레이션

기존 루트 UUID를 살펴보십시오

blkid  
#it will show something like:
#/dev/sda1: UUID="6b5085da-5b7c-4ca5-a907-1e527c87a478" TYPE="ext2"
#/dev/sda2: UUID="iZjCPX-AwGS-kEmg-zXPc-Z7ne-Xd3N-gXoPQd" TYPE="LVM2_member"

#We will need /dev/sda1's UUID later. Lets remember it (6b5085da-5b7c-4ca5-a907-1e527c87a478) for the future.

# Replace /dev/sdg with your FlashDrive. All data will be last!
fdisk /dev/sdg
make first partition (sdg1) about 500Mb as ext2/ext4
make second partition (sdg2) for example 6GB as LVM partition.

#replace ubuntu with the same LVM VolumeGroup for your root fs
#Extending VG with FlashDrive
vgextend ubuntu /dev/sdg2
modprobe dm-mirror
#Moving root partition to flash drive online :)
#Replace /dev/sdg2 with your Flash Drive's second partition
#Replace /dev/sda5 with your root drive
pvmove --verbose /dev/sda5 /dev/sdg2
#removing old root drive from VolumeGroup, so we can remove HDD from PC after manipulations. But not now.
vgreduce ubuntu /dev/sda5
#Creating boot partition.
#Replace /dev/sdg1 with your Flash Drive's first partition
mkfs -t ext4 -v /dev/sdg1
#Mounting first FlashDrive partition.
mkdir /mnt/boot
#Replace /dev/sdg1 with your Flash Drive's first partition
mount /dev/sdg1 /mnt/boot

#we will need some tools
apt-get install dump
#coping boot drive from HDD to FlashDrive first partition
#Replace /dev/sda1 (source) and /mnt/boot (destination) with your environments
(dump -0f - /dev/sda1) | ( cd /mnt/boot; restore -rf - )
#And let's not forget to restore boot sector (MBR):
# Replace /dev/sdg with FlashDrive disk path
grub-install /dev/sdg

#change UUID for /boot with the one we remember at the beginning of the Step 2 (6b5085da-5b7c-4ca5-a907-1e527c87a478).
vi /etc/fstab

#now we need to write changes to grub.
update-grub

#Now you can power off your PC.
poweroff
#Now you can replace old root FS's HDD.
#Do not forget configure your PC's BIOS to boot from your FlashDrive.

A)는 당신의 애벌레로드하지만 먼저 갈대에 부하 OS 할 수없는 수행 이 기사를 . ls 명령을 사용하여 그럽이 무엇을보고 있는지 알아 내십시오.

grub>ls
# Replace (hd0,msdos1) regard to previous output
grub>ls (hd0,msdos1)

# Replace (hd0,msdos1)/grub regard to previous output
grub>ls (hd0,msdos1)/grub

grub>configfile (hd0,msdos1)/grub/grub.cfg

변경 사항을 영구적으로 부팅하지 못한 후에는 grub을 업데이트해야합니다

update-grub

B) 그래 브가 전혀 보이지 않으면 Rescue CD를 사용하여 부팅하십시오.

#and install grub
#Lets figure out new name of your FlashDrive
blkid
# Replace /dev/sda with new name of your FlashDrive which system shows you
grub-install /dev/sda
#Reboot without Rescue CD and go to point A)
reboot

3 단계 . USB 플래시 드라이브의 루트 파일 시스템 용 AUFS .

apt-get update
 apt-get dist-upgrade
 apt-get install aufs-tools


# Aufs as root with apparmor. Enter dhclient3 to complain mode
# Network interface without it wount start/
apt-get install apparmor-utils
aa-complain dhclient3
# Or disable apparmor
#/etc/init.d/apparmor stop
#update-rc.d -f apparmor remove
#aptitude remove apparmor apparmor-utils

echo aufs >> /etc/initramfs-tools/modules

이제 / etc / initramfs-tools / scripts / init-bottom / __ rootaufs 파일을 작성하고 다음 스크립트를 배치하십시오.

#!/bin/sh
#  Copyright 2008 Nicholas A. Schembri State College PA USA
#
#  This program is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see
#    <http://www.gnu.org/licenses/>.

# https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash#rootaufs_Script

# Thank you Voyage Linux for the idea, http://voyage.hk/ Great job on release 0.5
#
# Tested with 8.04.1
# tested with 9.10
# tested with debian live 6.0.1
#
# ****************************************************************************************
# 
#                                 Change log
#
# 2008.08.01  Added debugging comments in "drop to a shell" section. grub option aufs=tmpfs-debug will stop the init script.
#             reviewed *********** fix fstab on tmpfs ******************
#             rootaufs failed when system was booted with /dev/xxx and fstab had uuid= info.
#             BlaYO pointed out the best and simplest solution was to use grep -v. Grep replaces a sed one liner.
#             Add the comment block to fstab
#             
# 2009.12.07 Corrected issue caused by Apparmor.
#            Name changed to __rootaufs.
# 
# 2011.08.19 Changed if condition to avoid issue (sh: bad number) when $aufsdebug is not set.
#            Now checks exists apparmor before delete.
#
# 2011.08.20 For work correctly with Debian Live 6.0.1 (http://live.debian.net/) two lines must be removed from rc.local modification part:
#             'mount -f  /ro'
#             'echo aufs-tmpfs /rw tmpfs rw 0 0 >>/etc/mtab'
#





case $1 in
prereqs)
    exit 0
    ;;
esac

export aufs

for x in $(cat /proc/cmdline); do 
    case $x in 
    root=*)
        ROOTNAME=${x#root=}
        ;;
    aufs=*)
        aufs=${x#aufs=}
        case $aufs in
        tmpfs-debug)
            aufs=tmpfs
            aufsdebug=1
            ;;
        esac    
        ;;
    esac
done


if [ "$aufs" != "tmpfs" ]; then
    #not set in boot loader 
    #I'm not loved. good bye
    exit 0
fi




# This is a simple overview of the steps needed to use aufs on the root file system and see the /rw and /ro  branches.
# initramfs init-botton script 
# move the root file system to aufs/unionfs readonly /ro
# root is mounted on ${rootmnt}
# create tmpfs on /rw
# create a aufs using /ro and /rw
# put some files on the tmpfs to fix mtab and fstab 
# move aufs to rootmnt to finish the init process.
# No changes to the root file system are made by this script.
#
#  Why!
#  This will allow you to use a usb flash drive and control what is written to the drive.
#  no need to rebuild the squashfs file just to add a program. 
#  boot to single user mode.  The system works the way you expect. boot aufs=tmpfs and no changes are written to the flash.
#  run ubuntu on an eeePC .  

# Install 
# Install ubuntu 8.04 Hardy. Hardy has aufs installed by default
# apt-get update
# apt-get dist-upgrade
# apt-get install aufs-tools
# echo aufs >> /etc/initramfs-tools/modules
# put this file in /etc/initramfs-tools/scripts/init-bottom/rootaufs
# chmod 0755 rootaufs
# # clean up menu.lst 
# update-grub
# update-initramfs -u
# vi /boot/grub/menu.lst
# add aufs=tmpfs to the default entry. 
# do not add this line to single user mode.
# boot to single user mode in order to install software. 
# note: if your home account is on the root file system, your files are in ram and not saved.
# 


echo 
echo "       root-aufs:  Setting up aufs on ${rootmnt} as root file system "
echo 

modprobe -q --use-blacklist aufs
if [ $? -ne 0 ]; then
    echo    root-aufs error:      Failed to load aufs.ko
    exit 0
fi

#make the mount points on the init root file system
mkdir /aufs
mkdir /rw
mkdir /ro

# mount the temp file system and move real root out of the way
mount -t tmpfs aufs-tmpfs /rw
mount --move ${rootmnt} /ro 
if [ $? -ne 0 ]; then
    echo    root-aufs error:    ${rootmnt}  failed to move to /ro
    exit 0
fi


mount -t aufs -o dirs=/rw:/ro=ro aufs /aufs
if [ $? -ne 0 ]; then
    echo    root-aufs error:      Failed to mount /aufs files system
    exit 0
fi


#test for mount points on aufs file system
[  -d /aufs/ro ] || mkdir /aufs/ro
[  -d /aufs/rw ] || mkdir /aufs/rw

# the real root file system is hidden on /ro of the init file system.  move it to /ro 
mount --move /ro /aufs/ro
if [ $? -ne 0 ]; then
    echo    root-aufs error:      Failed to move /ro /aufs/ro 
    exit 0
fi

# tmpfs file system is hidden on /rw
mount --move /rw /aufs/rw
if [ $? -ne 0 ]; then
    echo    root-aufs error:      Failed to move /rw /aufs/rw 
    exit 0
fi



#*********** fix fstab on tmpfs ******************
# test for /dev/sdx 
# this is not on the real file system.  This is created on the tmpfs each time the system boots.
# The init process will try to mount the root filesystem listed in fstab. / and swap must be removed.  
# the root file system must be mounted on /ro not on /

if [ "0$aufsdebug" -eq 1 ]; then
    echo  "   root-aufs debug:    Remove the root file system and swap from fstab "
    echo 
    echo 
    echo  "         ROOTNAME $ROOTNAME "
    echo  "         resume   $resume   "
    echo 
    echo  '     BlaYO pointed out that grep can be used to quickly remove '
    echo  '      the root file system from fstab. '
    echo 
    echo  '     Thank you BlaYO for the debug info.'
    echo

fi
# old code
# I'm sure that sed can do this in one step but I want to correct on the rootname  not matching the root in fstab.
#cat /aufs/ro/etc/fstab|sed -e s/$ROOTNAME/\#$ROOTNAME/ -e s/$resume/\#$resume/ >/aufs/etc/fstab  

#Add the comment block to fstab
cat <<EOF >/aufs/etc/fstab
#
#   RootAufs has mounted the root file system in ram
#
#  This fstab is in ram and the real fstab can be found /ro/etc/fstab
#  the root file system ' / ' has been removed.
#  All Swap files have been removed. 
#

EOF

#remove root and swap from fstab
cat /aufs/ro/etc/fstab|grep -v ' / ' | grep -v swap >>/aufs/etc/fstab  
if [ $? -ne 0 ]; then
    echo    root-aufs error:      Failed to create /aufs/etc/fstab 
    #exit 0
fi




# add the read only file system to fstab
#ROOTTYPE=$(/lib/udev/vol_id -t ${ROOT})
ROOTTYPE=$(cat /proc/mounts|grep ${ROOT}|cut -d' ' -f3)
ROOTOPTIONS=$(cat /proc/mounts|grep ${ROOT}|cut -d' ' -f4)
echo ${ROOT} /ro $ROOTTYPE $ROOTOPTIONS 0 0 >>/aufs/etc/fstab


# S22mount on debian systems is not mounting  /ro correctly after boot
# add to rc.local to correct what you see from df
#replace last case of exit with #exit
cat /aufs/ro/etc/rc.local|sed 's/\(.*\)exit/\1\#exit/' >/aufs/etc/rc.local  
echo mount -f  /ro >>/aufs/etc/rc.local 

# add back the root file system. mtab seems to be created by one of the init proceses. 
echo "echo aufs / aufs rw,xino=/rw/.aufs.xino,br:/rw=rw:/ro=ro 0 0 >>/etc/mtab" >>/aufs/etc/rc.local
echo "echo aufs-tmpfs /rw tmpfs rw 0 0 >>/etc/mtab" >>/aufs/etc/rc.local 
echo exit 0 >>/aufs/etc/rc.local 

#  Copyright 2008 Joaquin I. Bogado Garcia
#fix para apparmor, se desactiva y listo ( From the lethe project. )
[ -e /scripts/init-bottom/_apparmor ] && rm /scripts/init-bottom/_apparmor
[ -e /aufs/etc/init.d/apparmor ] && rm /aufs/etc/init.d/apparmor


#build remountrw
echo \#!/bin/sh >/aufs/bin/remountrw
echo mount -o remount,rw ${ROOT} >>/aufs/bin/remountrw
chmod 0700 /aufs/bin/remountrw

#build remountro
echo \#!/bin/sh >/aufs/bin/remountro
echo mount -o remount,ro ${ROOT} >>/aufs/bin/remountro
chmod 0700 /aufs/bin/remountro

# This should drop to a shell. (rewrite)
if [ "0$aufsdebug" -eq 1 ]; then
    echo
    echo "   root-aufs debug:    mount --move /aufs ${rootmnt} "
    echo 
    echo '   root-aufs debug:   init will stop here.   '
    echo  
    exit 0
fi

mount --move /aufs ${rootmnt}

exit 0

이 파일에 대한 권한을 변경 한 후 :

chmod 0755 /etc/initramfs-tools/scripts/init-bottom/rootaufs

GRUB2 변경.

cat /etc/grub.d/10_linux|sed  s/'linux_entry "${OS}" "${version}" false'/'linux_entry "RO: ${OS}" "${version}" false'/ |sed  s/'"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}"'/'"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT} aufs=tmpfs"'/ >/etc/grub.d/06_custom

sed -i.orig -e \
"/{GRUB_DISABLE_RECOVERY}\" != \"xtrue\" ]; then/s/^.*$/    \
if [ 0 ]; then/" \
/etc/grub.d/06_custom


sed -i.orig -e \
"/in_submenu=:/s/^.*$/    \
/" \
/etc/grub.d/06_custom

sed -i.orig -e \
"/\"Previous Linux versions/s/^.*$/    \
echo ''/" \
/etc/grub.d/06_custom

rm /etc/grub.d/06_custom.orig

chmod 755 /etc/grub.d/06_custom

update-grub
update-initramfs -u

1
고마워 ... 나는 지금 플래시 드라이브를 보호하기 위해 aufs가 어떻게 사용될 수 있는지 이해하고 있다고 생각합니다. 여전히 LVM을 이해하는 데 실패하고 있지만, 지금까지 귀하의 답변이 최고이며 현재로서는 더 나은 솔루션이없는 것 같습니다
galets

플래시 드라이브에 LVM을 사용하면 나중에 시스템을 다른 플래시 드라이브로보다 쉽게 ​​옮길 수 있습니다.
BBK

내 목표는 다른 플래시에 기록하는 것이 었습니다
galets

나의 마지막 의견을 명확히하기 위해서 : 나의 계획은 복구를 위해 필요할 때를 대비하여 하나의 플래시를 다른 플래시에
복사

전체 시스템을 다른 플래시 드라이브에 복사해야하지만 약간 더 작거나 (허리 공간이 큰 이유) 어떻게해야합니까? dd는 도움이되지 않습니다. 따라서 Lnix (또는 이와 유사한 것)는 * nix 시스템의 미래입니다. 향후 시스템을 유지 관리하는 것이 더 쉬울 것입니다.
BBK

1

나는 같은 질문을하고 똑같은 일을하고 싶습니다. 이 답변이 도움이 되나요?

SSD 용 OS를 어떻게 최적화합니까?

이 링크는 정보의 정확성을 보증 할 수는 없지만 매우 유용합니다.

http://bernaerts.dyndns.org/linux/53-debian-server-compact-flash

http://www.chrisnewland.com/using-linux-tmpfs-to-reduce-disk-writes-for-power-saving-and-longer-cf-lifespan-186

일단 당신이 그 일을 한 후에는 당신의 특정 응용 프로그램이 부트 플래시 드라이브에 무엇을 쓰고 있는지 모니터링하기 위해 모니터해야 할 것 같습니다. 주어진 드라이브에 무엇을 쓰고 있는지 쉽게 확인할 수있는 방법이 있습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.