스스로 부팅하고 설치할 수 있는 이미지를 원격으로 설치할 수 있습니까?

스스로 부팅하고 설치할 수 있는 이미지를 원격으로 설치할 수 있습니까?

Linux를 실행하는 원격 서버가 있습니다. OS 이미지가 손상될 경우를 대비해 원격으로 OS 이미지를 마운트하고 싶습니다(OS를 실험하는 동안 이런 일이 두 번 발생했습니다).

지금까지 제가 할 수 있는 유일한 방법은 물리적으로 컴퓨터 위치로 이동하여 USB 디스크를 사용하여 OS를 설치하는 것입니다. 그러면 BIOS에서 이를 확인하여 부팅할 수 있습니다.

기본적으로 컴퓨터에 연결하고 ssh, 이 이미지를 첨부하고, Windows의 가상 드라이브(예: 데몬 도구)에 있는 것처럼 작동하여 재부팅 후에도 유지되고 OS를 원격으로 설치할 수 있도록 하는 방법이 있습니까?

Google에서 솔루션을 찾고 있었지만 PXE 부팅에 대한 언급이 있는 것을 발견했습니다... 서버 등이 필요하기 때문에 복잡하게 들리고 이미지를 설치하고 완료하는 것만큼 간단하지 않습니다.

그 외에는 유용한 것을 찾지 못했기 때문에 옵션이 매우 제한되어 있습니다. 이것을 구현하는 방법을 아는 사람이 있습니까?

답변1

제가 합리적이라고 생각하는 가상의 상황은 다음과 같습니다.

  1. 대상 머신은 EFI입니다.
  2. grub대상에 설치되지 않았거나 시스템에서 완전히 지워졌습니다.
    • 방해만 할 수 있고, 그렇지 않으면 가치 있는 어떤 것도 제공하지 못할 것입니다.

/esp따라서 위 시나리오에서 우리가 할 수 있는 일은 EFI 시스템 파티션에 보관하는 작은 설치/복구 이미지에 대한 부팅 옵션을 구성하는 것입니다.

현재 설치에 문제가 있는 경우 최소한 EFI 시스템 파티션에 액세스할 수 있는 방법이 있는 한 펌웨어를 연결하고 다음 재부팅 시 복구 이미지로 부팅하도록 머신을 설정할 수 있습니다. 이 경우 우리가 해야 할 일은 텍스트 파일 한두 개를 변경하고 기도하고 실행하는 것뿐입니다.reboot now.

다음은 Arch Linux의 최소 구성을 위한 기본 명령 세트입니다.(제가 사용하는 방법이기 때문에)시스템은 제가 설명한 대로 여전히 작동합니다.

  • 먼저 작업 디렉터리를 만들고 일부 파일을 다운로드합니다.

    • 나는 aria2c그것을 여기에서 사용하고 있습니다. 나는 그것을 권장하지만 효과가 있는 것을 사용하십시오.
    • 나는 rEFIndunzip 도구를 사용 7za하지만 모든 경우에 동일한 도구 기본 설정을 사용합니다.
    • 제가 게시한 지 몇 시간/일 이내에 이 기사를 읽지 않으셨다면 아래에 사용된 링크를 사용하실 가능성이 높습니다.아니요현재의.

      mkdir /tmp/work && cd /tmp/work || exit
      aria2c  'magnet:?xt=urn:btih:331c7fac2e13c251d77521d2dc61976b6fc4a033&dn=archlinux-2015.06.01-dual.iso&tr=udp://tracker.archlinux.org:6969&tr=http://tracker.archlinux.org:6969/announce' \
              'http://iweb.dl.sourceforge.net/project/refind/0.8.7/refind-cd-0.8.7.zip'
      7za x ref*.zip; rm ref*zip
      
  • 다음에는 미러 디스크를 만들고 싶습니다.

    • 여기서는 루프 장치가 있는 파일을 사용하고 있지만 펌웨어에서 이 파일로 부팅하려면 실제 디스크를 사용해야 할 수도 있습니다.
    • 실제 장치의 경우 fallocate콘텐츠 losetup가 무시될 수 있으므로 실제 장치 이름이 /dev/sda[12]다음과 일치할 가능성이 높습니다./dev/loop0p[12]

      fallocate -l4G img
      
  • 이제 이 유틸리티를 사용하여 gdisk이 디스크를 분할하고 루프 장치에 할당하겠습니다.

    • 이는 프로그램에 대화형으로 제공하려는 옵션에 대한 스크립트된 바로 가기입니다. GUID 파티션 테이블과 유형의 테이블을 생성합니다.EFI 시스템이는 대상 디스크의 첫 번째 사용 가능한 750Mib와 디스크의 나머지 부분에 걸쳐 있는 또 다른 Linux 기본 파티션에 걸쳐 있습니다.
      • 실제 디스크를 사용하는 경우 파티션은 /dev/sda1각각 , 및 입니다. Linux 루트 디렉터리에 여러 파티션을 추가해야 하는 경우가 종종 있습니다./dev/sda2/dev/sda./img/dev/sda2
    • printf이 프로그램은 스크립트 유무에 관계없이 사용하기 쉽기 gdisk때문에 대화식으로 사용하는 것이 더 좋습니다. 실행 중에는 대상 디스크를 마운트하면 안 되며, w변경 사항을 쓰려면 루트 권한이 필요할 수도 있습니다.
    • 일반적으로 이 프로그램에서는 원하는 거의 모든 작업을 수행할 수 있으며 w작성하기 전까지는 어떤 결과도 발생하지 않으므로 반드시 수행해야 합니다.
    • $TGT내 변수를 쉘 변수에 넣을 것입니다 . 여기에 정의된 것 외에도 필요에 따라 사용자 정의할 수 있으며, 제가 사용하는 경우에도 가능합니다.

      printf %s\\n o y n 1 '' +750M ef00 \
                       n 2 '' '' '' '' w y |
      gdisk ./img     >/dev/null
      TGT=$(sudo losetup --show -Pf img)p
      
  • 또한 esp에 파일 시스템이 필요합니다. FAT여야 합니다.

    • 나는 fs 태그를 주었다VESP. 당신이 원하는대로 전화해야합니다.
    • 나중에 이 태그와 다른 구성 파일을 사용할 예정 /etc/fstab이므로 반드시 이렇게 하세요.무엇.
    • 제 생각에는 항상 라벨을 붙여야 한다고 생각합니다.모두디스크.
    • 지금 운영 체제가 설치되어 있으면 ${TGT}2물론 파일 시스템도 필요합니다.

      sudo mkfs.vfat -nVESP "$TGT"1
      
  • 일부 디렉토리를 생성 mount하고 관련 파일 추출을 시작합니다.

    set     ref     ref*iso         \
            arch    arch*iso        \
            efi     arch/EFI/archiso/efiboot.img
    while   [ "$#" -gt 0 ]
    do      mkdir "$1" || exit
            sudo mount "$2" "$1"
            shift 2
    done;   mkdir esp
    
  • 설치하다 rEFInd...

    • rEFInd부팅 관리자입니다. 주로 부팅 메뉴를 제공하고 채웁니다.
    • rEFIndesp에 구성 파일을 배치하며 원할 때 언제든지 편집할 수 있습니다.

      sudo ref/install.sh --usedefault "$TGT"1 &&
      sudo umount ref  && rm -rf ref*
      
  • 이제 우리는 mountesp를 사용하고 Arch 설치 디스크에서 필요한 파일을 가져와 라이브 부팅 가능한 복구 디스크를 얻습니다.

    • 대부분의 라이브 디스크는 분할되지 않은 평면 ISO 파일 시스템을 만들기 위해 추악한 해킹을 구현합니다.바라보다BIOS 시스템과의 하위 호환성을 유지하면서 UEFI 시스템에 허용되는 부팅 장치와 같습니다.
    • 아치 리눅스도 예외는 아닙니다.
    • 이것못생긴 해커그게 다야efiboot.img현재 ./efi.where에 설치되어 있으며 커널 및 initramfs 이미지 파일을 찾을 수 있습니다. 이것다른디스크에(존재하다 ./arch/arch/boot)~ 할 것이다아니요EFI 시스템에 적합합니다.

      sudo sh -ec    <<CONF '
           mount    "$1" esp
           cp -ar    efi/EFI/archiso esp/EFI
           cp -ar    arch/arch/*x86* esp/EFI/archiso
           mkdir     esp/EFI/archiso/cow
           xargs   > esp/EFI/archiso/refind_linux.conf
           umount    efi arch
           rm -rf    efi arch*' -- "$TGT"1
      \"arch_iso\" \"archisobasedir=EFI/archiso    \
                     archisolabel=VESP             \
                     copytoram                     \
                     cow_label=VESP                \
                     cow_directory=/EFI/archiso/cow\
                     cow_persistence=P             \
                     cow_spacesize=384M            \
                     initrd=EFI/archiso/archiso.img\"
      CONF
      

기본적으로 지속성을 바탕으로 처음부터 사전 부팅 복구 환경을 설치했습니다.쓰기 중 복사아카이브 저장(예를 들어, systemctl enable sshd_socket다음에 라이브 시스템을 시작할 때 이 설정을 유지할 수 있습니다.). Arch Linux 라이브 설치 미디어는 이제 시스템의 부팅 파티션에 있으며 부팅 메뉴에서 언제든지 불러올 수 있습니다. 물론 부팅 메뉴 관리자도 설치합니다.

  • 위와 관련하여 다음 사항에 유의해야 합니다.
    • *x86*나는 64비트 컴퓨터를 가지고 있고 glob이 내 요구에 적합하기 때문에 이것을 사용하고 있습니다 . 32비트 설치의 경우(그런데 왜?)대신 사용하십시오 *686*.
      • 나는 필요하다그런데, 총 7개의 파일(약 300M)만 있습니다.
      • live-system의 rootfs는 압축된 이미지입니다 esp/EFI/archiso/x86_64/airootfs.sfs.
    • 레이블로 디스크를 지정합니다. 아니요힌트또는 기타 말도 안되는 소리 - 디스크 이름이 지정되어 쉽게 찾을 수 있습니다. 대신 esp 태그가 선택하는 항목을 바꿔야 합니다.VESP.
    • 이것copytoram커널 매개변수는 Arch Linux 라이브 init시스템에 루프 마운트 전에 rootfs 이미지를 tmpfs에 복사하도록 지시합니다. 이를 통해 해당 환경에서 작업할 때 실제로 esp에 액세스할 수 있습니다. 대부분의 현장 장착 시스템은 유사한 배열을 제공합니다.

EFI의 하이라이트는 처리 능력입니다.파일 시스템. 최신 컴퓨터에서는 일부 원시 바이너리를 압축하여 디스크 파티션 사이에 삽입할 필요가 전혀 없습니다. 사람들이 여전히 이 작업을 수행하는 대신 일상적인 디렉터리 트리에 배열된 간단한 텍스트 파일을 사용하여 부팅 환경을 관리하고 구성할 수 있다는 것이 나에게는 놀랍습니다. 위에서는 커널과 initramfs를 중앙 트리 구조의 자체 명명된 폴더에 넣었습니다. EFI( rEFInd편의를 위해 이 예에서 가져옴)는 부팅 시 이를 호출합니다.경로명~ 때문에특히

이제 남은 일은 필요할 때 실제로 부팅할 시스템을 선택하는 방법을 이해하는 것입니다. 다운로드 - 지금 시작할 수 있습니다. 가상 머신에서 이 작업을 수행할 수 있습니다.qemu (OVMF 펌웨어가 필요합니다 -pflash)또는 컴퓨터를 재부팅한 다음 rEFInd커널을 감지하고 해당 경로 이름을 펌웨어에 전달하면 Arch Linux 라이브 시스템이 로드되고 실행됩니다. 디스크에 보다 영구적인 시스템을 설치하거나 여러 개를 설치하는 경우(라이브 디스크로 재부팅하고 설치를 수행하도록 선택한 경우 지금 이 작업을 수행할 수 있습니다.)- 커널과 initramfs를 동일한 구조로 유지해야 합니다. 이것은 정리하기 쉽습니다.

  • 예를 들어, 상상력이 부족해서 루트 파티션에 시스템을 설치하고 싶다면,root, 다음과 같이 설정하고 싶습니다.

    • mount --bind루트 경로 /boot의 특정 시작 폴더 /etc/fstab.
    • 이 문제를 처리 /etc/fstab하려면 두 줄을 생성하고 마운트 지점을 생성 해야 합니다 ./esp

      sudo sh -c          <<\FSTAB     '
           [ -d /esp ]    || mkdir /esp
           findmnt   /esp || mount -L ESP /esp
           mkdir -p  /esp/EFI/root
           cp        /boot/kernel binary   \
                     /boot/initramfs.img   \
                     /esp/EFI/root
           mount -B  /esp/EFI/root /boot
           cat   >>  /etc/fstab
           echo "$1">/boot/refind_linux.conf
      ' -- '"new_menu_item" "root=LABEL=root"'
      LABEL=ESP       /esp    vfat    defaults        0 2
      /esp/EFI/root   /boot   none    bind,defaults   0 0
      FSTAB
      

이와 같은 작업은 설치당 한 번만 수행하면 됩니다. 처음에 이런 방식으로 설정하지 않았다고 가정하면 커널과 initramfs가 이미 속한 위치에 있기 때문에 더 쉽습니다. 이 줄 /etc/fstab과 최소 구성 파일을 입력하면 /boot/refind_linux.conf모든 준비가 완료된 것입니다. 이와 같이 동일한 장치를 사용하여 동일한 시스템에서 원하는 만큼의 설치를 지원할 수 /esp있으며 부팅 가능한 모든 바이너리를 동일한 트리에 함께 포함할 수 있습니다. 시스템마다 몇 가지 다른 작업을 수행합니다. 예를 들어 Windows의 경우 이를 준수하려면 좀 더 동축 작업이 필요합니다.모든 직업.

  • 글쎄, 앞서 말했듯이 마지막으로 알아야 할 것은 파일 시스템에서 다음 부팅 가능한 설치를 선택하는 방법입니다. 이는 파일에 구성되어 있습니다 /esp/EFI/BOOT/refind.conf.

    • 이 파일을 읽어보십시오. 아마도 99%의 주석이 포함되어 있을 것이며 이 파일로 무엇을 할 수 있는지 알려줄 것입니다.
    • 물론 실제로 아무것도 할 필요는 없습니다. rEFInd기본적으로 스캔 트리에서 가장 최근에 업데이트된 커널이 시작됩니다.
    • 하지만 저는 보통 다음과 같은 옵션을 설정합니다.

      <<\DEF sudo tee \
             /esp/EFI/BOOT/refind.conf.def
      ### refind.conf.def
      ### when renamed to refind.conf this file
      ### will cause refind to select by default
      ### the menu item called "new_menu_item"
      ### in its /boot/refind_linux.conf
      default_selection new_menu_item
      ### this file will also set the menu timeout
      ### to only 5 seconds at every boot
      timeout 5
      ### END
      DEF
      
    • 구조 파일도 있고...

      <<\RES sudo tee \
             /esp/EFI/BOOT/refind.conf.res
      ### refind.conf.res
      ### this one will default to selecting
      ### the entry named "arch_iso" with a
      ### 10 second timeout
      default_selection arch_iso
      timeout 10
      ### END
      RES
      
      • 이제 이동할 수 있습니다.
      • 예를 들어, 다음을 수행한 후 구조 환경이 확실히 시작되도록 하려면 reboot now...

      sudo cp /esp/EFI/BOOT/refind.conf.res \
              /esp/EFI/BOOT/refind.conf
      
      • 교체하고.def~을 위한.res물론 위에서 사용한 것은 기본 루트 디렉터리로 돌아가는 것입니다.

답변2

명확성을 위해 귀하의 질문을 다시 설명하겠습니다.

Linux 배포판을 설치하고 싶지만 서버에 대한 물리적 액세스를 피하고 싶습니다. 다음 대안은 사용할 수 없습니다.

  • Dell의 iDRAC 또는 다른 공급업체의 동급 제품. 이러한 솔루션은 대역 외 서버 관리를 제공하고 서버에서 운영 체제를 실행하지 않는 경우에도 작동하며 제공하는 기능 중 하나는 가상 USB 스틱과 같은 가상 설치 미디어를 연결할 수 있다는 것입니다.
    • 하지만 이를 사용하려면 해당 기능을 갖춘 서버가 있어야 합니다.
  • PXE를 사용한 네트워크 부팅. PXE는 DHCP 및 TFTP를 사용하여 네트워크를 통해 서버를 부팅할 수 있도록 하는 오늘날 대부분의 서버에 있는 기능입니다.
    • 그러나 PXE를 사용하려면 DHCP 서버와 TFTP 서버를 구성할 수 있어야 하는데, 이는 현재 환경에서 불가능할 수 있습니다(예를 들어 근처에 이러한 서비스를 제공하는 서버가 없는 경우).

귀하의 질문에서 제안한 아이디어는 서버의 기존 운영 체제를 사용하여 네트워크를 통해 설치 이미지를 설치하고 어떻게든 설치 이미지를 설치하는 것입니다.

언뜻보기에 이것은 확실히 불가능합니다. 설치하려면 재부팅해야 합니다. 특히 기존 운영 체제 위에 설치하려는 경우 현재 운영 체제를 덮어쓰게 되며, 재부팅하지 않으면 운영 체제를 덮어쓰게 됩니다. 아직 사용 중입니다. 하지만 재부팅하면 네트워크 설치용 설치 이미지를 포함해 기존 운영체제는 당연히 종료된다.

내가 생각할 수 있는 방법은 거의 없다. 여기에는 2명의 후보자가 있습니다. 둘 다 매우 진보된 프로세스이므로 프로세스가 수행하는 작업과 작동 방식을 이해하지 않는 한 시도하지 않는 것이 좋습니다. 또한 먼저 로컬로 액세스할 수 있는 서버를 사용하는 연습을 해보세요.

  • kexec기존 운영 체제에서 직접 다른 운영 체제를 부팅하는 데 사용됩니다 . kexec현재 운영 체제를 대체하는 새 운영 체제에 대한 부팅 이미지를 제공할 수 있는 제가 아는 유일한 도구입니다. kexec이는 현재 운영 체제가 Linux이고 대상 운영 체제도 Linux인 경우에만 (유효하게) 작동합니다.

    kexec로드할 커널과 initrd를 제공하도록 요청합니다. 루트 파일 시스템 이미지와 같은 다른 것을 제공할 수 없습니다. 다행히 대부분의 Linux 설치 프로그램은 별도의 커널과 initrd 쌍을 사용하므로 이를 사용할 수 있습니다. 예를 들어, Debian 설치 프로그램에 필요한 커널과 initrd를 다음에서 얻을 수 있습니다.네트워크 출시 다운로드 페이지. 그것에서 그들을 추출하십시오 netboot.tar.gz. (예, 네트워크 부팅과 동일한 커널 및 initrd를 사용할 수 있어야 합니다.)

    나는 이 아이디어를 아직 테스트하지 않았습니다. 전문가 프로그램이라고 가정하므로 이를 구현하려면 몇 가지 작업을 수행해야 할 수도 있습니다. 이는 이 답변의 범위를 벗어납니다.

  • 현재 운영 체제 내에서 새 운영 체제를 설치합니다. 그런 다음 새 것으로 전환하십시오. 별도의 파티션에 설치하거나 LVM(이 경우 권장)을 사용하는 경우 다른 LV에 설치할 수 있습니다. 물론 이를 위해서는 두 운영 체제를 임시로 저장할 수 있는 충분한 공간이 필요합니다.

    debootstrap일반 운영 체제 설치 프로그램 대신 새 운영 체제 설치와 같은 도구를 사용해야 합니다. 이를 사용하는 것은 debootstrap일반적으로 설치 프로그램에서 처리하는 여러 단계(예: 커널 및 부트 로더 설치, 기본 시스템 구성 파일 편집)를 직접 수행해야 하기 때문에 일반 설치 프로그램을 사용하는 것보다 훨씬 사용자 친화적이지 않습니다. 이것은 또한 이것을 전문가 프로그램으로 만듭니다.

모든 경우에 원격 콘솔을 통해 서버에 액세스할 수 있기를 원합니다. 이는 예를 들어 IPMI를 통해 달성할 수 있습니다.

관련 정보