윈도우,우분투2개설치

윈도우 와 우분투2개 설치를 했는데 부팅할때 grub에 우분투1개랑 윈도우 밖에 안보이네요 …
설치순서는 윈도우, 우분투1, 우분투2를 설치를했습니다.

우분투1과 우분투2를 설치할때 각각 파티션을 다 따로둬서
sda3은 우분투1 스왑, sda4는 우분투1 /home파티션, sda5는 우분투1 / 파티션
sda6은 우분투2 스왑, sda7은 우분투2 /home파티션, sda8은 우분투2 / 파티션 이렇게 설치했구요.

우분투1의 부트로더를 MBR로 하고 우분투2의 부트로더를 우분투2의 / 파티션인 sda8에 설치했습니다.

윈도우, 우분투1 설치시까지는 그냥 정상적으로 우분투1 윈도우 잘보이는데요.
우분투2를 설치하고 나서 grub에 보니까 윈도우, 우분투1 만 보이더라구요 …
어떻게하면 우분투2까지 grub메뉴에서 보일수있을까요 ??

설치는 정상적으로 된것같습니다. 윈도우, 우분투1, 우분투2를 다 설치한상태에서 우분투1로 들어가서 fdisk -l 하니까 각 파티션마다 linux와 /swap 파티션이 잡혀있는데

왜이런거죠 ?? 답변 부탁드려요 ㅠㅠ…

[quote="lcs318":2h3rc3cs]윈도우 와 우분투2개 설치를 했는데 부팅할때 grub에 우분투1개랑 윈도우 밖에 안보이네요 …
설치순서는 윈도우, 우분투1, 우분투2를 설치를했습니다.

우분투1과 우분투2를 설치할때 각각 파티션을 다 따로둬서
sda3은 우분투1 스왑, sda4는 우분투1 /home파티션, sda5는 우분투1 / 파티션
sda6은 우분투2 스왑, sda7은 우분투2 /home파티션, sda8은 우분투2 / 파티션 이렇게 설치했구요.

우분투1의 부트로더를 MBR로 하고 우분투2의 부트로더를 우분투2의 / 파티션인 sda8에 설치했습니다.

윈도우, 우분투1 설치시까지는 그냥 정상적으로 우분투1 윈도우 잘보이는데요.
우분투2를 설치하고 나서 grub에 보니까 윈도우, 우분투1 만 보이더라구요 …
어떻게하면 우분투2까지 grub메뉴에서 보일수있을까요 ??

설치는 정상적으로 된것같습니다. 윈도우, 우분투1, 우분투2를 다 설치한상태에서 우분투1로 들어가서 fdisk -l 하니까 각 파티션마다 linux와 /swap 파티션이 잡혀있는데

왜이런거죠 ?? 답변 부탁드려요 ㅠㅠ…[/quote:2h3rc3cs]

GRUB 부트 메뉴는 update-grub 명령에 의해 변경됩니다.
그리고, update-grub 명령은 내부적으로 grub-mkconfig를 호출하여 출력된 내용을 /boot/grub/grub.cfg로 저장합니다,
grub-mkconfig 내에서는 /etc/grub.d/10_linux의 호출에 의해 리눅스 부트메뉴를 생성합니다.
/etc/grub.d/10_linux는 /etc/default/grub의 내용을 실행하는데, 이 과정에서 lsb_release 명령이 사용되어,
리눅스 배포판 이름을 얻습니다.
또한 grub-probe -t fs_uuid / 명령으로 루트파티션의 UUID를 얻고, grub-probe -t fs_uuid /boot 명령으로 부트파티션의 UUID를 얻습니다.
그리고 나서, boot 디렉토리에 존재하는 vmlinuz* 와 initrd.img* 파일들에 대해서, 부트메뉴에 추가하게 됩니다.
메뉴명은 , "배포판이름, 그리고 Linux 커널버전" 이렇게 되는데,
Ubuntu, 그리고 Linux 3.10.3-031003-generic 이런식이 됩니다.

이제 한가지 가정을 해 봅시다,
/dev/sda1에는 우분투가 /dev/sda2에는 Mint가 설치되어 있다고 가정하고, 지금 update-grub을 실행하는 운영체제가
우분투라고 가정을 하면, 이때, 루트 파티션은 /dev/sda1 부트파티션은 /dev/sda1 이 될 것입니다.
grub-mkconfig에서 /boot를 검색했을 때, /dev/sda1 파티션에서 boot디렉토리를 찾아볼 것 이고,
/dev/sda2에서는 찾지 않을 것입니다.
그렇게 되면, 민트에서 설치한 커널은 메뉴에 추가되지 않을 것이고, 루트파티션은 우분투의 루트파티션으로 연결될 것입니다.
반대의 경우에는 우분투에서 설치한 커널이 메뉴에 추가되지 않을 것이며, 루트파티션은 민트의 루트파티션으로 연결될 것입니다.

이를 공유하기 위해서는 boot파티션을 따로 만들어서, 두 배포판이 같이 사용하는 방법이 있을 수 있지만,
이 경우, 두 시스템에서 만들어질 모듈과 램디스크 이미지가 다를 수 있기 때문에, 충돌이 발생할 수 있습니다.
또한, 커널이 모두 메뉴에 추가된다고 하더라도, 배포판이름과 사용될 루트파티션을 모두 포함할진 않을 것입니다.

이에 대한, 해결책으로는 각각의 배포판으로 chroot 하여, 각각 grub-mkconfig 명령으로 만들어서 합쳐야 될 것입니다.

** 각기 다른 우분투 배포판의 grub_mkconfig의 결과 합치기 **

[code:2h3rc3cs]
sudo gedit /usr/sbin/update-grub
[/code:2h3rc3cs]

[code:2h3rc3cs]#!/bin/sh
set -e
TMPMP=$(mktemp -d)

cleanup() {
umount "$TMPMP/dev/pts" "$TMPMP/dev" "$TMPMP/sys" "$TMPMP/proc" "$TMPMP" 2>/dev/null || true
rm -rf "$TMPMP" || true
}
trap cleanup INT EXIT QUIT
mkconfig() {
chroot $TMPMP /bin/sh -c "mount /usr 2>/dev/null; mount /boot 2>/dev/null; mount /etc 2>/dev/null;grub-mkconfig $@;umount /usr /boot /etc 2>/dev/null; true" 2>/dev/null || true
}
mkconfig_all() {
disk_dev=$(grub-probe -t device /|sed -r ‘s,[0-9]+$,’)
is_first=0

for v in "$disk_dev"[0-9]*;
do
    mount $v $TMPMP >/dev/null 2>&1 || continue

    if [ -f "$TMPMP/sbin/init" ]; then
        mounted=
        for m in proc sys dev dev/pts; do
            mount -o bind /$m $TMPMP/$m 2>/dev/null && mounted="$mounted /$m" || true
        done
        printf "$v "
        #chroot $TMPMP /bin/sh -c "mount /usr 2>/dev/null; mount /boot 2>/dev/null; mount /etc 2>/dev/null; lsb_release -i -r -s|tr '\n' ' ';umount /usr /boot /etc 2>/dev/null; true" 2>/dev/null || true
        if [ $is_first -eq 0 ]; then
            is_first=1
            mkconfig "$@"| sed -r 's/^(### END \/etc\/grub\.d\/[0-9]+_linux ###)/\1\n####CUT_BEGIN####/'
            echo "####CUT_END####"
        else
            mkconfig "$@"| sed -nr '/^### BEGIN \/etc\/grub\.d\/[0-9]+_linux ###/,/^### END \/etc\/grub\.d\/[0-9]+_linux ###/p'|sed -nr '/^\s*menuentry/,$p'
        fi
        echo 
        for m in $(echo "$mounted"|tr ' ' '\n'|tr -s '\n'|tac); do
            umount $TMPMP$m 2>/dev/null
        done
    fi

    umount $TMPMP 2>/dev/null || continue
done | sed -r '/####CUT_BEGIN####/,/####CUT_END####/{H;d};${G}'

}
#exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
mkconfig_all "$@" > /boot/grub/grub.cfg
[/code:2h3rc3cs]

이 코드는, /sbin/init가 존재하는 파티션에 대해서, 루트파티션이라고 가정하고,
각 루트 파티션별로 chroot 하여, 해당 배포판에서 사용하는 부트파티션을 마운트한 후, grub-mkconfig를 실행한 후,
첫번째 배포판에 대해서는 10_linux 스크립트 이후의 내용에 대해 ####CUT_BEGIN#### 과 ####CUT_END####으로 둘러싸서 출력하고,
두번째 이상의 배포판에서는 10_linux 스크립트 내용 중 메뉴 부분만 출력하여
합쳐진 내용에 대해서,
####CUT_BEGIN####,####CUT_END####으로 둘러 쌓인 부분을 맨뒤로 옮기는 코드입니다.
그 결과,
배포판1의 헤더스크립트
배포판1의 10_linux의 모든 내용
배포판2의 10_linux의 메뉴
####CUT_BEGIN####
배포판1의 10_linux이후의 모든 내용
####CUT_END####
이렇게 grub.cfg가 만들어집니다.

이렇게, 여러 개의 배포판에 대해서, 자동으로 부트 메뉴를 만드는것에는 애로사항이 많습니다.
그렇기에 이런 식으로 여러 개의 배포판을 설치하는 것 보다,
가상머신 위에서 설치하여 사용하시거나,
ISO로 LIVE모드로 부팅하시거나,
debootstrap을 사용하여, 다른 배포판을 chroot로 설치하는 방법을 추천합니다.

  1. ISO 파일을 따로 저장하여, 다른 환경에서 라이브 부팅하는 방법
    ** 준비 작업 **

[code:2h3rc3cs]
sudo mkdir /linux-isos

필요한 ISO파일 복사

sudo mkdir -p /live/mint /live/debian

mint용 40G공간 할당

sudo dd if=/dev/zero of=/live/mint/casper-rw bs=1M count=40960
sudo mkfs.ext4 -F /live/mint/casper-rw

debian용 20G공간 할당

sudo dd if=/dev/zero of=/live/debian/casper-rw bs=1M count=20480
sudo mkfs.ext4 -F /live/debian/casper-rw
[/code:2h3rc3cs]

** 부트메뉴 편집 **
sudo gedit /boot/grub/custom.cfg

[code:2h3rc3cs]
set username="live"
set options="username=${user} persistent noprompt noeject quiet splash"

#mint 메뉴
menuentry "Mint LIVE" {
insmod part_msdos
insmod ext2
insmod ntfs
insmod fat
insmod loopback

set isofile=/linux-isos/mint.iso
search -s -f $isofile
loopback lo $isofile

linux (lo)/casper/vmlinuz boot=casper persitent-path=/live/mint iso-scan/filename=$isofile hostname=Mint-LIVE $options
initrd (lo)/initrd.lz

}
#debian 메뉴
menuentry "Debian LIVE" {
insmod part_msdos
insmod ext2
insmod ntfs
insmod fat
insmod loopback

set isofile=/linux-isos/debian.iso
search -s -f $isofile
loopback lo $isofile

linux (lo)/live/vmlinuz boot=live persistent-path=/live/debian findiso=$isofile config hostname=Debian-LIVE $options
initrd (lo)/live/initrd.img

}
[/code:2h3rc3cs]

  1. pbuilder(debootstrap과 chroot 이용)를 이용하여 다른 배포판 환경에서 작업하는 방법
    ==> 이것은 멀티부팅을 요하지 않고, 주로 다른 배포판의 빌드를 위해서 사용됩니다.

** 준비 작업 **

[code:2h3rc3cs]
sudo ln -s / /sysroot
sudo apt-get install pbuilder pbuilder-scripts
[/code:2h3rc3cs]

** 간편 스크립트 작성**
gedit $HOME/bin/dists

[code:2h3rc3cs]
#!/bin/sh
CODENAME="${2:-$(lsb_release -c -s)}"
ARCH="${3:-$(dpkg --print-architecture)}"
COMPONENTS="${COMPONENTS:-main universe multiverse restricted}"
BASE_DIR="$HOME/dists/$CODENAME/$ARCH"
builder="pbuilder"
MOUNT_HOME=0
MOUNT_SYSROOT=1

if [ "$MOUNT_HOME" -eq 1 ]; then
home_dir="/home"
else
home_dir=
fi
if [ -z "$1" ]; then
echo "
Usage $(basename $0) COMMANDS [CODENAME] [ARCH]

COMMANDS:
update [options] Use ‘man pbuilder’ for help
build [options] Use ‘man pbuilder’ for help
execute [options] Use ‘man pbuilder’ for help
clean Use ‘man pbuilder’ for help
login [options]

create              create chroot jail of debian/ubuntu distribution
restore             restore from original
apply               apply to original
del                 remove chroot jail of debian/ubuntu distribution

CODENAME debian sid or ubuntu code name
ARCH architecture of package
"
exit 0
fi
case "$1" in
create)
[ -d "$BASE_DIR/work.cow" ] && rmdir "$BASE_DIR"/work.cow
[ ! -d "$BASE_DIR" ] && mkdir -p "$BASE_DIR"
;;
restore)
if [ -d "$BASE_DIR"/orig.cow ]; then
sudo rm -rf "$BASE_DIR"/work.cow 2>/dev/null
sudo cp -rf "$BASE_DIR"/orig.cow "$BASE_DIR"/work.cow
echo "Successfully restored: $BASE_DIR" 1>&2
exit 0
else
echo "Original directory not found: $BASE_DIR/orig.cow" 1>&2
exit 1
fi
;;
apply)
if [ -d "$BASE_DIR"/work.cow ]; then
sudo rm -rf "$BASE_DIR"/orig.cow 2>/dev/null
sudo cp -rf "$BASE_DIR"/work.cow "$BASE_DIR"/orig.cow
echo "Successfully applied: $BASE_DIR" 1>&2
exit
else
echo "Working directory not found: $BASE_DIR/work.cow" 1>&2
exit 1
fi
;;

del|delete)
    sudo rm -rf "$BASE_DIR" >/dev/null 2>&1
    echo "Successfully removed $BASE_DIR"
    exit
    ;;

esac

#export APTCACHE=/var/cache/apt/archives
export APTCACHEHARDLINK=no

if [ "$MOUNT_SYSROOT" -eq 1 ]; then
[ ! -e "/sysroot" ] && [ ! -L "/sysroot" ] && sudo ln -s / /sysroot
[ -L "/sysroot" ] && sysroot=/sysroot || sysroot=
else
sysroot=
fi
sudo -E $builder --$1 --distribution $CODENAME --architecture $ARCH --components "$COMPONENTS" --no-targz --buildplace "$BASE_DIR"/work.cow --bindmounts "/var/cache/apt/archives $sysroot $home_dir" --preserve-buildplace --aptcache ""

if [ "$1" = "create" ]; then
PROG="$0"
shift
"$PROG" apply "$@"
fi
[/code:2h3rc3cs]

** 실행 속성 부여 **

[code:2h3rc3cs]
sudo chmod +x $HOME/bin/dists
[/code:2h3rc3cs]

** 예제 **

[code:2h3rc3cs]
dist create raring i386

dist login raring i386
cd /sysroot$HOME/c-src
apt-get install vim vim-scripts
vim doit.c
gcc -o ../c-out/doit doit.c
../c-out/doit
exit
$HOME/c-out/doit

dist create sid
dist login sid
ls -l
exit

dist del sid

[/code:2h3rc3cs]