리눅스 부팅 시작 프로세스 정리
시스템이 응용 프로그램을 실행할 준비가 되려면 무엇이 필요한지 궁금한가?
리눅스 부팅 및 시작 프로세스를 이해하는 것은 리눅스를 구성하고 시작 문제를 해결할 수 있다는 점에서 중요하다.
이 문서는 grub2 부트로더를 사용하는 부트업 시퀀스와 systemd 초기화 시스템이 동작하는 순서에 대해 간략하게 설명한다.
grub2: https://en.wikipedia.org/wiki/GNU_GRUB
system: https://en.wikipedia.org/wiki/Systemd
실제로 리눅스 컴퓨터를 부팅중 일때 필요한 두 가지 이벤트가 있다.
- 부팅 및 시작
컴퓨터 전원 ON
커널 초기화
systemd 시작
시작 프로세스는 동작/점거 상태 정보를 리눅스 컴퓨터로 가져 오는 작업을 완료한다.
전반적인 리눅스 부팅 및 시작 프로세스는 이해하기 쉽다.
- BIOS POST
- 부트로더 (GRUB2)
- 커널 초기화
- 모든 프로세스의 부모인 system를 시작
GRUB2와 system는 최근에 발표된 리눅스에서 초기화 소프트웨어로 사용되고 있다.
1 부팅 프로세스
컴퓨터 전원 ON
부팅 프로세스 시작
루트 사용자 및 일반사용자 로그인
부팅 순서 변경
재 부팅
2. BIOS POST
컴퓨터 전원 ON
BIOS(기본 입출력 시스템)의 일부인 POST(Power On Self Test) 실행.
1981년 IBM 최초의 PC 설계.
BIOS 하드웨어 구성 요소로 하드웨어 초기화 설계.
POST는 컴퓨터 하드웨어가 올바르게 동작하는지 확인하기 위함이며, BIOS의 일 부분이다.
POST가 실패하면 컴퓨터를 사용할 수 없음(즉 부팅 프로세스를 진행 불 가능)
BIOS POST는 하드웨어의 기본 동작 가능성을 검사 한 다음 연결된 모든 부팅 장치에서 부팅 섹터를 찾는다.
부팅 섹터는 BIOS 인터럽트 INT 13H를 실행한다.
유효한 부트 레코드를 포함 하는 첫 번째 부트 섹터는 RAM에 로드 된 후 제어 명령을 부트 섹터에 로드 된 코드(grub)로 전송 된다.
부트 섹터가 실제 부트 로더의 첫 단계이다.
리눅스 사용되는 부트로더 grub, grub2, lilo가 있음.
3. GRUB
GRUB2는 "GRand Unified Bootloader, version 2"의 약자이다.
현재 대부분의 최신 리눅스 배포판에서 기본 부트로더를 사용한다.
GRUB2는 컴퓨터 운영체제 커널을 찾아 메모리에 로드 할 정도로 잘 만들어진 프로그램이다.
GRUB은 멀티 부트 사양과 호환되도록 설계되었다.
https://en.wikipedia.org/wiki/Multiboot_Specification
단일 운영 체제의 부트 레코드를 변경해 로드 할 수 있다.
GRUB은 설치된 리눅스 배포본에 대해 여러 다른 커널 중 하나를 선택해 부팅 할 수 있다.
업데이트 된 커널이 부팅이 안 될 경우 또는 특정 프로그램에서 동작 안할 경우 다른 이전 버전의 커널로 부팅 할 수 있다.
이러한 구성 파일은 /boot/grub/gurb.cnf 파일을 사용해 설정 할 수 있다.
grub1은 현재 레거시로 간주되며 대부분의 리눅스 배포판에서는 grub2로 변경 되었다.
grub2는 grub1을 다시 작성한 소프트웨어 프로그램이다.
grub2는 grub1과 동일한 부트 기능을 제공한다.
grub2는 메인 프레임과 유사한 명령 기반의 미리 정해진 OS 환경이기 때문에 부팅 전 단계에서 더 많은 유연성을 제공한다.
grub2는 /boot/grub2/gurb.cfg 파일로 설정 가능하다.
두 grub의 주요 기능은 리눅스 커널을 메모리에 로드해 실행하는 것이다.
두 버전의 grub은 본질적으로 동일한 방식으로 동작하며 동일한 세 단계를 거치지 만 grub 역할을 수행하는 방법에 대한 설명을 위해 grub2를 사용한다.
4. 단계별 절차.
1 시작
- BIOS POST 섹션 동작
- POST 끝날 때 연결된 디스크 MBR(마스터 부트 레코드)에 있는 부트 레코드 검색 찾기
- 부트 레코드 메모리 로드
- 부트 스트랩 코드, 즉 GRUB2 1 단계은 파티션 테이블 함께 하드 드라이브의 첫 번째 섹터 512 바이트 맞춤.
- 마스트 부트 레코드(https://en.wikipedia.org/wiki/Master_boot_record)에서 실제 부트 스트랩 코드에 할당 된 총 공간은 446 바이트 이다
- 1 단계 446 바이트 파일의 이름은 boot.img이며 별도로 부트 레코드에 추가되는 파티션 테이블은 포함하지 않는다.
부트 레코드는 작아야 하기 때문에 파일 시스템 구조를 이해하지 못한다.
따라서 1 단계의 유일한 목적은 1.5 단계 RAM에 로드 한 후 1 단계를 1.5 단계에서 제어 전환한다.
1.5 단계
위에서 언급했듯이 grub의 1.5 단계는 부트 레코드 자체와 디스크 드라이브의 첫 번째 파티션 사이의 공간에 있어야 한다.
이 공간은 기술적 이유(역사적)로 사용되지 않고 남겨놓았다.
하드 드라이브의 첫 번째 파티션은 섹터 63에서 시작 하고 섹터 0의 MBR과 함께 62 512-바이트 섹터-31744 바이트- 남겨둔다.
GRUB은 1.5단계인 core.img 파일을 저장 한다.
core.img 파일은 25389 바이트 이므로 MBR과 이를 저장할 첫 번째 디스크 파티션 사이에 충분 한 공간이다.
이 단계에서 수용 할 수 있는 많은 양의 코드로 인해 표준 ext linux 파일 시스템, fat, NTFS와 같은 공통 파일 시스템 드라이버를 포함 할 수 있다.
grub2의 2단계에서 표준 ext 파일 시스템을 사용할 수 있지만, 논리 볼륨에는 사용할 수 없다.
따라서 2단계 파일의 표준 위치는 /boot/ 파일시스템, /boot/grub2 에 있다.
/boot 디렉토리는 grub에서 지원하는 파일 시스템에 있어야 한다.
전체 파일 시스템은 아니다.
1.5 단계의 기능은 /boot 파일 시스템에서 2 단계에서 필요한 파일을 찾고 필요한 드라이버를 로드하는 데 필요한 파일 시스템 드라이버를 실행해 시작하는 것이다.
2 단계
이 단계의 grub 관련 모든 파일은 /boot/grub2 디렉토리 하위 디렉토리에 있다.
grub2에는 1단계와 2단계와 같은 이미지 파일은 없다.
대신, 대부분은 /boot/grub2/i386-pc 디렉토리에서 필요에 따라 로드되는 런타임 커널 모듈로 구성된다.
grub2 2단계의 기능은 리눅스 커널을 찾아서 RAM에 로드하고 컴퓨터를 제어하는 것이다.
커널 및 관련 파일은 /boot/ 디렉토리에 있다.
보통 커널 파일은 vmlinuz로 시작하는 이름으로 식별 할 수 있다.
/boot/ 디렉토리의 내용을 나열하여 현재 시스템에 설치된 커널을 볼 수 있다.
grub2는 여러 리눅스 커널 중 하나를 선택해 부팅을 지원한다.
grub2의 2단계는 선택한 커널을 메모리에 로드하고 컴퓨터 제어를 커널에게 넘기는 것이다.
3 핵심
모든 커널은 공간을 절약하기 위해 압축 해제 된 자체 압축 형식으로 되어있다.
커널은 RAM 디스크 이미지 및 하드 드라이브의 장치 맵과 함께 /boot 디렉토리에 있다.
선택한 커널을 메모리에 로드하고 실행 한 후에는 RAM 디스크 압축을 풀기 전 커널 버전과 맞는 RAM 디스크 파일을 풀어야 한다.
커널이 압축을 풀면 systemd를 로드한다.
systemd는 이전 방식 sysv(BSD) init(유닉스) 프로그램을 대체하는 방식이다.
https://en.wikipedia.org/wiki/Systemd
https://en.wikipedia.org/wiki/Init#SysV-style
여기 까지가 부팅 과정이 끝이다.
이 시점에서, 리눅스 커널 및 systemd 실행 하지만, 최종 사용자는 아직 아무런 작업을 수행할 수 없다.
4. 시작 프로세스
시작 프로세스는 부팅 프로세스를 따르고, Linux 컴퓨터는 생산적인 작업에 사용할 수 있는 작동 상태를 제공 합니다.
5. systemd
systemd는 모든 프로세스의 모체이며 리눅스 호스트를 생산적인 작업을 수행 할 수 있는 상태로 만든다.
이전 init 프로그램보다 훨씬 광범위한 기능 중 일부는 파일 시스템 마운트, 시스템 서비스 시작 및 관린, 실행중인 리눅스 호스트 관리가 여러 측면에 보강 되었다.
시동 순서와 관련이 없는 systemd의 작업은 여기서는 언급하지 않느다.
먼저, systemd는 스왑 파일이나 파티션을 포함하여 /etc/fstab에 정의 된대로 파일 시스템을 마운트 한다.
이 시점에서 /etc/ 에 있는 구성 파일에 접근 할 수 있다.
구성 파일 /etc/systemd/system/default.target 을 사용하여 호스트를 부트하기 위해 상태 또는 대상을 결정 한다.
default.target 파일은 실제 대상 파일 만 심볼릭 링크한다.
데스크탑 워크스테이션의 경우 일반적으로 이전의 systemV init에서 runlevel 5와 동일한 graphical.target이 된다.
서버의 경우 기본값은 SystemV에서 실행 레벨 3과 같은 다중 사용자 모드일 가능성이 크다.
emergency.target은 단일 사용자 모드와 유사하다.
systemd 시작과 이전 버전의 systemV 시작 런레벨을 비교 한다.
halt.target: 시스템 전원을 끄지 않고 시스템 정지
0|poweroff.target|runlevel0.target: 시스템을 정지하고 전원을 끈다
S|emergency.target|:단일 사용자 모드. 실행중인 서비스가 없다. 파일 시스템이 마운트되지 않는다. 사용자가 시스템과 상호 작용할 수 있도록 복구 쉘만 주 콘솔에서 실행
1|rescue.target|runlevel1.target: 기본 시스템이며 가장 기본적인 서비스만 실행하고 기본 콘솔 구조 쉘을 마운트한다.
2||runrevel2.target: 다중 사용자, NFS, GUI 지원 하지 않는 모드
3|multi-user.target|runlevel3.target: 모든 서비스가 실행 중이자만 명령해 인터페이스 CLI 모드
4||runlevel4.target: 미사용
5|graphicla.target|runlevel5.target:GUI 다중 사용자 모드
6|reboot.target|runlevel6.target: 재부팅
default.target : 이 대상은 multi-user.target 또는 graphical.target에 대한 심볼릭 링크로 앨리어싱된다.
systemd는 항상 default.target을 사용하여 시스템을 시작한다.
default.target은 절대로 halt.target, poweroff.target, reboot.target 으로 지정하면 된다.
현 런레벨 확인.
sudo systemctl get-default
graphical.target ---> 그래픽 모드
런레벨 종류
0: poweroff.target
1: rescue.target
2,3,4: multi-user.target
5: graphical.target
6: reboot.target
런레벨 변경.
sudo systemctl set-default multi-user.target
Alt+F1 = 로그인 화면 이동.
각 런레벨 구성 파일에는 일련의 종속성이 있다.
systemd가 필요한 종속성을 시작한다.
이러한 종속성은 특정 기능 수준에서 리눅스 호스트를 실행하는 데 필요한 서비스이다.
system는 또한 레거시 SystemV init 디렉토리를 보고 거기에 시작 파일이 있는지 확인한다.
SystemV init 구성 파일이 있으면 서비스를 시작한다.
부트업 맨 페이지 확인.
http://man7.org/linux/man-pages/man7/bootup.7.html
sysinit.target 및 basic.target 은 시작 프로세스의 체크 위치로 간주 된다.
systemd가 서비스를 시작 할 때 병렬로 서비스를 동작 시키기 위한 방법으로 설계 되었다.
하지만, 더욱 유연성을 고려해 systemd 가 시작 하기전 동작 해야할 특정 서비스 실행 할 수 있다.
이러한 검사 방법으로 모든 서비스에 대해 동작 시킬 수 가 있게된다.
sysinit.target 은 종속되는 모든 유닛이 완료 처리.
모든 유닛. 마운트 파일 시스템, 스왑 파일 설정, udev 시작, 임의 생성 시드 설정, 하위 레벨 서비스 시작, 하나 이상의 파일 시스템이 암호화 되어있는 경우 암호화 서비스 설정은 sysinit 내용에 완료된다.
targeting 이러한 작업을 병렬로 처리한다.
sysinit.target는 간략한 시스템 기능 측면이 고 basic.target으로 이동 하는 데 필요한 모든 하위 수준 서비스와 장치를 시작 한다.
local-fs-pre.target
|
v
(various mounts and (various swap (various cryptsetup
fsck services...) devices...) devices...) (various low-level (various low-level
| | | services: udevd, API VFS mounts:
v v v tmpfiles, random mqueue, configfs,
local-fs.target swap.target cryptsetup.target seed, sysctl, ...) debugfs, ...)
| | | | |
\__________________|_________________ | ___________________|____________________/
\|/
v
sysinit.target
|
____________________________________/|\________________________________________
/ | | | \
| | | | |
v v | v v
(various (various | (various rescue.service
timers...) paths...) | sockets...) |
| | | | v
v v | v rescue.target
timers.target paths.target | sockets.target
| | | |
v \_________________ | ___________________/
\|/
v
basic.target
|
____________________________________/| emergency.service
/ | | |
| | | v
v v v emergency.target
display- (various system (various system
manager.service services services)
| required for |
| graphical UIs) v
| | multi-user.target
| | |
\_________________ | _________________/
\|/
v
graphical.target
system.target이 완료된 후 systemd는 basic.target을 시작하여 이를 수행하는 데 필요한 모든 유닛을 시작한다.
기본 목표는 다음 target(대상)에 필요한 유닛을 시작하여 몇 가지 추가 기능을 제공한다.
여기에는 다양한 실행 가능한 디렉토리 위치에, 통신 소켓 및 타이머에 대한 경로 설정과 같은 것들이 포함된다.
마지막으로, 사용자 레벨 목표 인 multi-user.target 또는 graphical.target 을 초기화 할 수 있다.
multi-user.target은 콘솔 텍스트 모드로 로그인 할 수 있다.
graphical.target이 기본이면 그래픽 로그인을 볼 수 있다.
GUI 로그인 화면은 사용 하는 기본 디스플레이 관리자에 따라 다르다.
DM: Displayer Manager
|Desktop|Display manager|설명|
|GNOME |GDM|그놈 디스플레이 메니저|
|KDE |KDM|KDE 기반 디스플레이 메니저|
||LightDM|조그만한 디스플레이 메니저|
|LXDE|LXDM|LXDE 디스플레이 메니저|
|KDE|SDDM|단순한 데스크탑 디스플레이 메니저|
||XDM|기본 X 윈도우 시스템 디스플레이 메니저|
WM: Windows Manager: X window System:https://en.wikipedia.org/wiki/X_Window_System
|Desktop|Window manager|설명|
|Unity|Compiz
||FluxBox||
||FVWM||
||IceWM||
|KDE|Kwin|2008년 KDE Plasma 4 시작|
|GNOME|Metacity|그놈 2의 기본값
|GNOME|Mutter|그놈 3의 기본값
||twm|아주 오래되고 간단한 창 관리자|
|Xfce|Xfwm||
요즘 새롭게 나온 WM: Windows Manager인 Wayland: https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)
6. 문제점
/etc/default/grub 수정시 원하는 커널로 부팅 되지 않을 경우가 발생.
GRUB_DEFAULT = GRUB_DEFAULT = 2
수정 후 저장.
grub2-mkconfig > /boot/grub2/grub.cfg
또는
grub-mkconfig > /boot/grub/grub.cfg
7. 결론
grub2 및 systemd init 시스템은 대부분 최신 리눅스 배포판에서 사용된다.
부팅 및 시작 단계의 핵심 구성 요소이다.
특히 systemd를 둘러싼 논쟁이 있었음에도 불구하고 이 두 구성 요소는 커널을 처음 로드하고 리눅스 시스템의 기능을 생성하는 데 필요한 모든 서비스를 시작 할 수 있다.
이전 버전보다 grub2와 systemd가 더 복잡하지만, 기능을 습듭하면 관리하기가 쉽다.
systemd 메뉴얼 페이지: https://www.freedesktop.org/software/systemd/man/index.html
2019/04/08
2019/02/27
pci-e 리얼텍 랜카드 설정.
sudo lspci -v
커널에서 r8169 로 잡히는게 문제
r8168 드라이버를 받아서 설치
r8169 드라이버를 blacklist에 넣어 로딩하지 않게 하면 문제가 해결
8169는 pci 기반 칩셋이고 8168은 pci-e 기반 칩셋
다운로드
http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false
linux 버전으로 2016년에 나온 것으로 다운
압축 해제 후 예전 커널 드라이버 사용하지 않기위해 blacklist 에 추가
echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf
컴파일이 안 될 경우에는 헤더가 없다는 메세지가 나온다.
즉 /lib/modules/`uname -r`/ build 심볼 링크가 없었서 그런다.
이걸 해결 하기 위해서 헤더를 설치해 준다.
sudo apt-get install linux-headers-$(uname -r)
또는
sudo apt-get install linux-generic
sudo apt-get install linux-source
참고 명령어
apt-get install linux-headers-$(uname -r)
apt-get install kernel-package
sudo apt-get update && sudo apt-get install linux-headers-3.5.0-36-generic
sudo apt-get update && sudo apt-get install linux-headers-`uname -r`
다운로드 받는 파일로 이동
rmmod r8169
네트웍 동작 하지 않음
컴파일
./autorun.sh
자동 모듈적제
depmod -a
수동 모듈 적제
insmod ./src/r8168.ko
ERROR: could not insert module ./src/r8168.ko: File exists --> 모듈이 적제 되었다는 의미
램디스크 드라이버 추가
mkinitramfs -o /boot/initrd.img-'uname -r' 'uname -r'
부팅시 자동 적재
echo "r8168" >> /etc/modules
재부팅
reboot
확인
lsmod | grep r8168
커널에서 r8169 로 잡히는게 문제
r8168 드라이버를 받아서 설치
r8169 드라이버를 blacklist에 넣어 로딩하지 않게 하면 문제가 해결
8169는 pci 기반 칩셋이고 8168은 pci-e 기반 칩셋
다운로드
http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false
linux 버전으로 2016년에 나온 것으로 다운
압축 해제 후 예전 커널 드라이버 사용하지 않기위해 blacklist 에 추가
echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf
컴파일이 안 될 경우에는 헤더가 없다는 메세지가 나온다.
즉 /lib/modules/`uname -r`/ build 심볼 링크가 없었서 그런다.
이걸 해결 하기 위해서 헤더를 설치해 준다.
sudo apt-get install linux-headers-$(uname -r)
또는
sudo apt-get install linux-generic
sudo apt-get install linux-source
참고 명령어
apt-get install linux-headers-$(uname -r)
apt-get install kernel-package
sudo apt-get update && sudo apt-get install linux-headers-3.5.0-36-generic
sudo apt-get update && sudo apt-get install linux-headers-`uname -r`
다운로드 받는 파일로 이동
rmmod r8169
네트웍 동작 하지 않음
컴파일
./autorun.sh
자동 모듈적제
depmod -a
수동 모듈 적제
insmod ./src/r8168.ko
ERROR: could not insert module ./src/r8168.ko: File exists --> 모듈이 적제 되었다는 의미
램디스크 드라이버 추가
mkinitramfs -o /boot/initrd.img-'uname -r' 'uname -r'
부팅시 자동 적재
echo "r8168" >> /etc/modules
재부팅
reboot
확인
lsmod | grep r8168
ubuntu 16.04 server zentyal install
sudo apt-get update
sudo apt-get upgrade
sudo add-apt-repository "deb http://archive.zentyal.org/zentyal 5.1 main extra"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 10E239FF wget -q http://keys.zentyal.org/zentyal-5.1-archive.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install zentyal
sudo apt-get upgrade
sudo add-apt-repository "deb http://archive.zentyal.org/zentyal 5.1 main extra"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 10E239FF wget -q http://keys.zentyal.org/zentyal-5.1-archive.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install zentyal
2019/02/01
mkisofs ios 파일 재 패키징
mkisofs: ISO 이미지 파일 재 패키지 후 설치
설치 원본 이미지 다운로드 후 마운트
mkdir -p /mnt/linux
mount -o loop /tmp/linux-install.iso /mnt/linux
ISO 파일 복사
cd /mnt
tar -cvf - linux | (cd /var/tmp/ && tar -xf - )
파일 수정 후 재 패키징
cd /var/tmp/linux
mkisofs -o ../your-new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no -emul-boot -boot-load-size 4 -boot-info-table -J -R -V Your Disk Name Here .
설치 원본 이미지 다운로드 후 마운트
mkdir -p /mnt/linux
mount -o loop /tmp/linux-install.iso /mnt/linux
ISO 파일 복사
cd /mnt
tar -cvf - linux | (cd /var/tmp/ && tar -xf - )
파일 수정 후 재 패키징
cd /var/tmp/linux
mkisofs -o ../your-new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no -emul-boot -boot-load-size 4 -boot-info-table -J -R -V Your Disk Name Here .
2019/01/30
16.04 nimf 파일 패키징
Nimf의 .deb 패키지 빌드하기
빌드를 위해서 devscripts, build-essential를 먼저 설치합니다.
username:~$ sudo apt install devscripts build-essential
username:~$ cd
username:~$ mkdir tmp-build
username:~$ cd tmp-build
username:~/tmp-build$ wget https://github.com/cogniti/nimf/archive/2017.02.21.tar.gz
username:~/tmp-build$ tar zxf 2017.02.21.tar.gz
username:~/tmp-build$ cd nimf-2017.02.21
username:~/tmp-build/nimf-2017.02.21$ dpkg-checkbuilddeps
그랬는데 이런 메시지가 나오면
dpkg-checkbuilddeps: Unmet build dependencies:
하면서 여러가지 패키지들 이름이 나오면 그 모든 패키지들을 설치하면 됩니다.
Ubuntu 16.04 계열에서는 librime-dev 의존성 이슈를 해결하기 위해서 해당 rime을 빼고 빌드합니다.
nimf/configure.ac 에서 PKG_CHECK_MODULES(NIMF_RIME_DEPS, [rime> = 1.2.9 $ LIBNIMF_REQUIRES]) 줄 제거
nimf/modules/engines/Makefile.am 에서 nimf-rime 을 제거
nimf/debian/control 에서 librime-dev (> = 1.2.9) 줄 제거
하고 빌드하면 됩니다.
username:~/tmp-build/nimf-2017.02.21$ debuild
하면 빌드를 시작합니다.
다 되면 패키지들을 확인해보세요.
username:~/tmp-build/nimf-2017.02.21$ cd ..
username:~/tmp-build$ ls
2017.02.21.tar.gz nimf_2017.02.21_amd64.deb
nimf-2017.02.21 nimf_2017.02.21.dsc
nimf_2017.02.21_amd64.build nimf_2017.02.21.tar.xz
nimf_2017.02.21_amd64.changes nimf-dev_2017.02.21_amd64.deb
출처 : https://github.com/cogniti/nimf/issues/33#issuecomment-282760133
기본 문서 : https://cogniti.github.io/nimf/ko/support.html
빌드를 위해서 devscripts, build-essential를 먼저 설치합니다.
username:~$ sudo apt install devscripts build-essential
username:~$ cd
username:~$ mkdir tmp-build
username:~$ cd tmp-build
username:~/tmp-build$ wget https://github.com/cogniti/nimf/archive/2017.02.21.tar.gz
username:~/tmp-build$ tar zxf 2017.02.21.tar.gz
username:~/tmp-build$ cd nimf-2017.02.21
username:~/tmp-build/nimf-2017.02.21$ dpkg-checkbuilddeps
그랬는데 이런 메시지가 나오면
dpkg-checkbuilddeps: Unmet build dependencies:
하면서 여러가지 패키지들 이름이 나오면 그 모든 패키지들을 설치하면 됩니다.
Ubuntu 16.04 계열에서는 librime-dev 의존성 이슈를 해결하기 위해서 해당 rime을 빼고 빌드합니다.
nimf/configure.ac 에서 PKG_CHECK_MODULES(NIMF_RIME_DEPS, [rime> = 1.2.9 $ LIBNIMF_REQUIRES]) 줄 제거
nimf/modules/engines/Makefile.am 에서 nimf-rime 을 제거
nimf/debian/control 에서 librime-dev (> = 1.2.9) 줄 제거
하고 빌드하면 됩니다.
username:~/tmp-build/nimf-2017.02.21$ debuild
하면 빌드를 시작합니다.
다 되면 패키지들을 확인해보세요.
username:~/tmp-build/nimf-2017.02.21$ cd ..
username:~/tmp-build$ ls
2017.02.21.tar.gz nimf_2017.02.21_amd64.deb
nimf-2017.02.21 nimf_2017.02.21.dsc
nimf_2017.02.21_amd64.build nimf_2017.02.21.tar.xz
nimf_2017.02.21_amd64.changes nimf-dev_2017.02.21_amd64.deb
출처 : https://github.com/cogniti/nimf/issues/33#issuecomment-282760133
기본 문서 : https://cogniti.github.io/nimf/ko/support.html
2019/01/29
라이브 cd 이용한 grub 부트로더 복구
grub 복구
- 다른 운영체제 설치 할 때 부트로더 재 적용.
라이브 CD 마운트
sudo mount /dev/sdXY /mnt
디렉토리 바인딩
sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys
마운트 디렉토리 루트 접근
sudo chroot /mnt
부트로더 설치 및 적용
grub-install /dev/sdX
grub-install --recheck /dev/sdX
update-grub
루트 종료 및 마운트 해제
exit &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt
- 다른 운영체제 설치 할 때 부트로더 재 적용.
라이브 CD 마운트
sudo mount /dev/sdXY /mnt
디렉토리 바인딩
sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys
마운트 디렉토리 루트 접근
sudo chroot /mnt
부트로더 설치 및 적용
grub-install /dev/sdX
grub-install --recheck /dev/sdX
update-grub
루트 종료 및 마운트 해제
exit &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt
120 초 대기 IO 처리.
vnc 및 ssh 접근 시 타임 아웃 문제.
/proc/sys/kernel/hung_task_timeout_secs
메모리 자원 사용 확인
sar -r
cpu 자원 사용 확인
sar -u
hung_task_timeout_secs
기본적 리눅스 파일 시스템 캐싱에서 사용할 수 있는 메모리는 최대 40%.
40% 메모리를 사용하게 되면, 미 해결된 데이터를 디스크로 플래시 한 후 IO 동기화 진행.
flush out 하기 위해 기본적으로 120초의 시간 제한을 둠.
입출력 하위 시스템은 데이터를 120 초 동안 플래시 할 만큼 빠르지 않음.
입출력 하위 시스템은 느리게 응답하고 더 많은 요청을 처리하게 되면 시스템 메모리 오류가 발생 http 요청을 처리.
테스트
sudo sysctl -w vm.dirty_ratio=10
sudo sysctl -w vm.dirty_background_ratio=5
적용(시스템 재 부팅 시 정보 사라짐)
sudo sysctl -p
시스템 적용
sudo vi /etc/sysctl.conf
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
sudo reboot
/proc/sys/kernel/hung_task_timeout_secs
메모리 자원 사용 확인
sar -r
cpu 자원 사용 확인
sar -u
hung_task_timeout_secs
기본적 리눅스 파일 시스템 캐싱에서 사용할 수 있는 메모리는 최대 40%.
40% 메모리를 사용하게 되면, 미 해결된 데이터를 디스크로 플래시 한 후 IO 동기화 진행.
flush out 하기 위해 기본적으로 120초의 시간 제한을 둠.
입출력 하위 시스템은 데이터를 120 초 동안 플래시 할 만큼 빠르지 않음.
입출력 하위 시스템은 느리게 응답하고 더 많은 요청을 처리하게 되면 시스템 메모리 오류가 발생 http 요청을 처리.
테스트
sudo sysctl -w vm.dirty_ratio=10
sudo sysctl -w vm.dirty_background_ratio=5
적용(시스템 재 부팅 시 정보 사라짐)
sudo sysctl -p
시스템 적용
sudo vi /etc/sysctl.conf
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
sudo reboot
2019/01/28
우분투 16.04 메인보드 교체후 시스템 안정화.
dmesg | grep -i "error\|fail\|warn"
1 asmp -> 바이오스 설정.
활성화
2 사운드 문제 해결
사운드 카드 확인
cat /proc/asound/cards
사운드 드라이버 검색
lsmod | grep snd
드라이버 정보 확인(인텔 온보드)
modinfo snd_hda_audio
snd_hda_intel(인텔 온보드 드라이버 이름)
블랙리스트 추가
sudo nano /etc/modprobe.d/blacklist.conf
blacklist snd_hda_intel
sudo update-initramf -u
블랙 리스트 적용 확인
cat /proc/asound/cards
사운드 관련 프로그램 사용 없을 때 USB 자동 해제 방지
sudo nano /etc/pulse/default.pa
#load-module module-suspend-on-idle
사운드 구성 추가 프로그램 설치
sudo apt-get install pavucontrol
3 기계식 USB 키보드 문제
usb_submit_urb(ctrl) failed
hid-generic 0003:0853:0145.0004: usb_submit_urb(ctrl) failed: -1
lsusb
Bus 001 Device 005: ID 0853:0145 Topre Corporation
vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="usbhid.quirks=0x0853:0x0145:0x20000408"
부트로더 업데이트
sudo update-grub
부트로더 2.0 업데이트 명령어
sudo grub-mkconfig -o /boot/grub/grub.cfg:wq
4. pci error
vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="usbhid.quirks=0x0853:0x0145:0x20000408 quiet splash pci=noaer"
5 NVIDIA 커널 버전 및 설치 드라이버 확인.
nvidia: module verification failed: signature and/or required key missing - tainting kernel
서명문제.
CONFIG_MODULE_SIG_FORCE 커널 옵션 활성화 문제.
드라이버 확인
sudo ubuntu-drivers devices
vga 확인
lspci | grep -i vga
디스플레이 정보 확인
sudo lshw -C display
로그 파일
/var/log/Xorg.0.log
/var/log/gpu-manager.log
설치 가능 패키지 확인
dpkg -l | grep -i nvidia
커널 메세지 확인
dmesg | egrep -i "bbswitch | nvidia"
시스템 정보 요약
inxi -Fxz
그랙픽 드라이버 설치 정보 확인
inxi -G
하드웨어 확인
sudo lshw -C display | grep product
운영체제 확인
/etc/etc/issue
커널 지원 설치 버전 확인.
dpkg --list | fgrep nvidia
소스 설치
드라이브 다운로드 : GTX 1070 드라이버 설치
http://www.nvidia.co.kr/Download/index.aspx?lang=kr
sudo vi /etc/modprobe.d/blacklist.conf
blacklist amd76x_edac #this might not be required for x86 32 bit users.
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
기존 바이너리 패키지 삭제
sudo apt-get remove --purge nvidia*
윈도우 메니저 서비스 중지
sudo service lightdm stop
다운로드 받은 드라이버 설치
chmod +x NVIDIA-Linux-x86_64-384.98.run
sudo ./NVIDIA-Linux-x86_64-384.98.run
윈도우 메니저 시작
sudo service lightdm start
설치 확인
nvidia-smi
nvidia-settings
삭제
sudo sh ~/Downloads/NVIDIA-Linux-*-384.98.run --uninstall
아직 미 해결... dmesg 메세지 출력 됨.
드라이버는 동작 명령으로 확인... 커널 메세지의 때문에 흠...
7 vmware
sudo /usr/bin/vmware-modconfig --console --install-all
1 asmp -> 바이오스 설정.
활성화
2 사운드 문제 해결
사운드 카드 확인
cat /proc/asound/cards
사운드 드라이버 검색
lsmod | grep snd
드라이버 정보 확인(인텔 온보드)
modinfo snd_hda_audio
snd_hda_intel(인텔 온보드 드라이버 이름)
블랙리스트 추가
sudo nano /etc/modprobe.d/blacklist.conf
blacklist snd_hda_intel
sudo update-initramf -u
블랙 리스트 적용 확인
cat /proc/asound/cards
사운드 관련 프로그램 사용 없을 때 USB 자동 해제 방지
sudo nano /etc/pulse/default.pa
#load-module module-suspend-on-idle
사운드 구성 추가 프로그램 설치
sudo apt-get install pavucontrol
3 기계식 USB 키보드 문제
usb_submit_urb(ctrl) failed
hid-generic 0003:0853:0145.0004: usb_submit_urb(ctrl) failed: -1
lsusb
Bus 001 Device 005: ID 0853:0145 Topre Corporation
vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="usbhid.quirks=0x0853:0x0145:0x20000408"
부트로더 업데이트
sudo update-grub
부트로더 2.0 업데이트 명령어
sudo grub-mkconfig -o /boot/grub/grub.cfg:wq
4. pci error
vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="usbhid.quirks=0x0853:0x0145:0x20000408 quiet splash pci=noaer"
5 NVIDIA 커널 버전 및 설치 드라이버 확인.
nvidia: module verification failed: signature and/or required key missing - tainting kernel
서명문제.
CONFIG_MODULE_SIG_FORCE 커널 옵션 활성화 문제.
드라이버 확인
sudo ubuntu-drivers devices
vga 확인
lspci | grep -i vga
디스플레이 정보 확인
sudo lshw -C display
로그 파일
/var/log/Xorg.0.log
/var/log/gpu-manager.log
설치 가능 패키지 확인
dpkg -l | grep -i nvidia
커널 메세지 확인
dmesg | egrep -i "bbswitch | nvidia"
시스템 정보 요약
inxi -Fxz
그랙픽 드라이버 설치 정보 확인
inxi -G
하드웨어 확인
sudo lshw -C display | grep product
운영체제 확인
/etc/etc/issue
커널 지원 설치 버전 확인.
dpkg --list | fgrep nvidia
소스 설치
드라이브 다운로드 : GTX 1070 드라이버 설치
http://www.nvidia.co.kr/Download/index.aspx?lang=kr
sudo vi /etc/modprobe.d/blacklist.conf
blacklist amd76x_edac #this might not be required for x86 32 bit users.
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
기존 바이너리 패키지 삭제
sudo apt-get remove --purge nvidia*
윈도우 메니저 서비스 중지
sudo service lightdm stop
다운로드 받은 드라이버 설치
chmod +x NVIDIA-Linux-x86_64-384.98.run
sudo ./NVIDIA-Linux-x86_64-384.98.run
윈도우 메니저 시작
sudo service lightdm start
설치 확인
nvidia-smi
nvidia-settings
삭제
sudo sh ~/Downloads/NVIDIA-Linux-*-384.98.run --uninstall
아직 미 해결... dmesg 메세지 출력 됨.
드라이버는 동작 명령으로 확인... 커널 메세지의 때문에 흠...
7 vmware
sudo /usr/bin/vmware-modconfig --console --install-all
2019/01/27
ubuntu pxe boot install
1. 유틸 설치
apt-get install isc-dhcp-server tftpd-hpa syslinux ntf-kernel-server initramfs-tools
2. dhcp 원격 서버 설정
cat /etc/dhcp/dhcpd.conf
# DHCP server is authoritative for all networks
authoritative;
# extra options
# RFC3442 routes
option rfc3442-classless-static-routes code 121 = array of integer 8;
# MS routes
option ms-classless-static-routes code 249 = array of integer 8;
pid-file-name "/var/run/dhcp-server/dhcpd.pid";
ddns-update-style none;
option domain-name-servers 127.0.0.1;
allow booting;
allow bootp;
default-lease-time 1800;
max-lease-time 7200;
shared-network eth1 {
subnet 10.10.10.0 netmask 255.255.255.0 {
option routers 10.10.10.1;
option domain-name "nemo.lan";
option domain-name-servers 10.10.10.1;
option ntp-servers 10.10.10.1;
default-lease-time 1800;
max-lease-time 7200;
pool {
next-server 10.10.10.1;
option tftp-server-name "10.10.10.1";
filename "/netboot_setup/pxelinux.0";
range 10.10.10.2 10.1apt-get install -y samba genisoimage wimtools cabextract0.10.254;
}
}
group {
option routers 10.10.10.1;
option domain-name "nemo.lan";
option domain-name-servers 10.10.10.1;
option ntp-servers 10.10.10.1;
default-lease-time 1800;
max-lease-time 7200;
}
}
3. tftpd 설정
vi /etc/init/tftpd-hpa.conf
# tftp-hpa - trivial ftp server
description "tftp-hpa server"
author "Chuck Short <zulcss@ubuntu.com>"
start on runlevel [2345]
stop on runlevel [!2345]
console output
expect fork
respawn
env PIDFILE="/var/run/tftpd-hpa.pid"
env DEFAULTS="/etc/default/tftpd-hpa"
script
if [ -f ${DEFAULTS} ]; then
. ${DEFAULTS}
fi
if [ ! -d "${TFTP_DIRECTORY}" ]; then
echo "${TFTP_DIRECTORY} missing, aborting."
exit 1
fi
exec /usr/sbin/in.tftpd --listen --user ${TFTP_USERNAME} --address ${TFTP_ADDRESS} ${TFTP_OPTIONS} ${TFTP_DIRECTORY}
end script
root@ss:/var/
vi /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
4. 웹 서버 및 inetd 설정
apt-get install apache2 inetutils-inetd
cat /etc/inetd.conf
# /etc/inetd.conf: see inetd(8) for further informations.
#
# Internet superserver configuration database
#
#
# Lines starting with "#:LABEL:" or "#<off>#" should not
# be changed unless you know what you are doing!
#
# If you want to disable an entry so it isn't touched during
# package updates just comment it out with a single '#' character.
#
# Packages should modify this file by using update-inetd(8)
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
#:INTERNAL: Internal services
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
#daytime stream tcp nowait root internal
#time stream tcp nowait root internal
#:STANDARD: These are standard services.
#:BSD: Shell, login, exec and talk are BSD protocols.
#:MAIL: Mail, news and uucp services.
#<off># smtp stream tcp nowait root /usr/sbin/sendmail sendmail -Am -bs
#<off># submission stream tcp nowait root /usr/sbin/sendmail sendmail -Am -bs
#<off># smtps stream tcp nowait root /usr/sbin/sendmail sendmail -Am -bs
#:INFO: Info services
#:BOOT: TFTP service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#:RPC: RPC based services
#:HAM-RADIO: amateur-radio services
#:OTHER: Other services
#<off># sane-port stream tcp nowait saned:saned /usr/sbin/saned saned
#kerberos-adm stream tcp nowait root /usr/sbin/tcpd /usr/lib/heimdal-servers/kadmind
#krb_prop stream tcp nowait root /usr/sbin/tcpd /usr/sbin/hpropd
9571 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/ldminfod
5. 우분투 서버 iso 파일 다운로드 후 마운트
mount -o loop iso_download_file /mnt
cp -a /mnt/install/netboot/* /var/lib/tftpboot/
mkdir /var/www/html/ubuntu
cp -a /mnt/* /var/www/html/ubuntu/
vi /var/lib/tftpboot/pxelinux.cfg/default
label linux
kernel ubuntu-installer/amd64/linux
append ks=http://172.16.1.97/ks.cfg vga=normal initrd=ubuntu-installer/amd64/initrd.gz ramdisk_size=16432 root=/dev/rd/0 rw --
06 서비스 재 시작
/etc/init.d/apache2 restart
/etc/init.d/tftpd-hpa restart
/etc/init.d/isc-dhcp-server restart
apt-get install isc-dhcp-server tftpd-hpa syslinux ntf-kernel-server initramfs-tools
2. dhcp 원격 서버 설정
cat /etc/dhcp/dhcpd.conf
# DHCP server is authoritative for all networks
authoritative;
# extra options
# RFC3442 routes
option rfc3442-classless-static-routes code 121 = array of integer 8;
# MS routes
option ms-classless-static-routes code 249 = array of integer 8;
pid-file-name "/var/run/dhcp-server/dhcpd.pid";
ddns-update-style none;
option domain-name-servers 127.0.0.1;
allow booting;
allow bootp;
default-lease-time 1800;
max-lease-time 7200;
shared-network eth1 {
subnet 10.10.10.0 netmask 255.255.255.0 {
option routers 10.10.10.1;
option domain-name "nemo.lan";
option domain-name-servers 10.10.10.1;
option ntp-servers 10.10.10.1;
default-lease-time 1800;
max-lease-time 7200;
pool {
next-server 10.10.10.1;
option tftp-server-name "10.10.10.1";
filename "/netboot_setup/pxelinux.0";
range 10.10.10.2 10.1apt-get install -y samba genisoimage wimtools cabextract0.10.254;
}
}
group {
option routers 10.10.10.1;
option domain-name "nemo.lan";
option domain-name-servers 10.10.10.1;
option ntp-servers 10.10.10.1;
default-lease-time 1800;
max-lease-time 7200;
}
}
3. tftpd 설정
vi /etc/init/tftpd-hpa.conf
# tftp-hpa - trivial ftp server
description "tftp-hpa server"
author "Chuck Short <zulcss@ubuntu.com>"
start on runlevel [2345]
stop on runlevel [!2345]
console output
expect fork
respawn
env PIDFILE="/var/run/tftpd-hpa.pid"
env DEFAULTS="/etc/default/tftpd-hpa"
script
if [ -f ${DEFAULTS} ]; then
. ${DEFAULTS}
fi
if [ ! -d "${TFTP_DIRECTORY}" ]; then
echo "${TFTP_DIRECTORY} missing, aborting."
exit 1
fi
exec /usr/sbin/in.tftpd --listen --user ${TFTP_USERNAME} --address ${TFTP_ADDRESS} ${TFTP_OPTIONS} ${TFTP_DIRECTORY}
end script
root@ss:/var/
vi /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
4. 웹 서버 및 inetd 설정
apt-get install apache2 inetutils-inetd
cat /etc/inetd.conf
# /etc/inetd.conf: see inetd(8) for further informations.
#
# Internet superserver configuration database
#
#
# Lines starting with "#:LABEL:" or "#<off>#" should not
# be changed unless you know what you are doing!
#
# If you want to disable an entry so it isn't touched during
# package updates just comment it out with a single '#' character.
#
# Packages should modify this file by using update-inetd(8)
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
#:INTERNAL: Internal services
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
#daytime stream tcp nowait root internal
#time stream tcp nowait root internal
#:STANDARD: These are standard services.
#:BSD: Shell, login, exec and talk are BSD protocols.
#:MAIL: Mail, news and uucp services.
#<off># smtp stream tcp nowait root /usr/sbin/sendmail sendmail -Am -bs
#<off># submission stream tcp nowait root /usr/sbin/sendmail sendmail -Am -bs
#<off># smtps stream tcp nowait root /usr/sbin/sendmail sendmail -Am -bs
#:INFO: Info services
#:BOOT: TFTP service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#:RPC: RPC based services
#:HAM-RADIO: amateur-radio services
#:OTHER: Other services
#<off># sane-port stream tcp nowait saned:saned /usr/sbin/saned saned
#kerberos-adm stream tcp nowait root /usr/sbin/tcpd /usr/lib/heimdal-servers/kadmind
#krb_prop stream tcp nowait root /usr/sbin/tcpd /usr/sbin/hpropd
9571 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/ldminfod
5. 우분투 서버 iso 파일 다운로드 후 마운트
mount -o loop iso_download_file /mnt
cp -a /mnt/install/netboot/* /var/lib/tftpboot/
mkdir /var/www/html/ubuntu
cp -a /mnt/* /var/www/html/ubuntu/
vi /var/lib/tftpboot/pxelinux.cfg/default
label linux
kernel ubuntu-installer/amd64/linux
append ks=http://172.16.1.97/ks.cfg vga=normal initrd=ubuntu-installer/amd64/initrd.gz ramdisk_size=16432 root=/dev/rd/0 rw --
06 서비스 재 시작
/etc/init.d/apache2 restart
/etc/init.d/tftpd-hpa restart
/etc/init.d/isc-dhcp-server restart
iscsi 방식 pxe boot install
nas: 파일전송 방식(서버에 다운로드 작업 후 전송)
das: 블록 전송 방식(서버에 직접 접근 작업)
iscsi 프로토콜을 사용해 NAS를 DAS 처럼 사용 한다.
스토리지 장비에서 반틈을 das, 또 다른 반틈은 NAS를 사용할 때 iscsi 방식을 사용한다.
iPXE 부팅
필수 패키지 설치
apt-get -y install tftpd-hpa isc-dhcp-server build-essential samba liblzma-dev mkisofs unzip iscsitarget
syslinux 다운로드 및 설치
cd /usr/src
mkdir pxe
cd pxe
wget https://www.kernel.org/pub/linux/utils/boot/syslinux/6.xx/syslinux-6.03.tar.gz
tar -zxvf syslinux-6.03.tar.gz
cd syslinux-6.0.3
make #this will fail, it's ok
cp ./bios/core/pxelinux.0 /var/lib/tftpboot/
cp ./bios/com32/elflink/ldlinux/ldlinux.c32 /var/lib/tftpboot/
cp ./bios/com32/libutil/libutil.c32 /var/lib/tftpboot/
cp ./bios/com32/menu/menu.c32 /var/lib/tftpboot/
cp ./bios/memdisk/memdisk /var/lib/tftpboot/
dhcpd eth1 적용
auth eth1
iface eth1 inet static
address 192.168.69.1
netmask 255.255.255.0
인터페이스 활성화
ifup eth1
DHCP 구성 설정 파일 /etc/dhcp/dhpcd.conf 추가
cat /etc/dhcp/dhcpd.conf
# DHCP server is authoritative for all networks
authoritative;
# extra options
# RFC3442 routes
option rfc3442-classless-static-routes code 121 = array of integer 8;
# MS routes
option ms-classless-static-routes code 249 = array of integer 8;
pid-file-name "/var/run/dhcp-server/dhcpd.pid";
ddns-update-style none;
option domain-name-servers 127.0.0.1;
allow booting;
allow bootp;
default-lease-time 1800;
max-lease-time 7200;
shared-network eth1 {
subnet 10.10.10.0 netmask 255.255.255.0 {
option routers 10.10.10.1;
option domain-name "nemo.lan";
option domain-name-servers 10.10.10.1;
option ntp-servers 10.10.10.1;
default-lease-time 1800;
max-lease-time 7200;
pool {
next-server 10.10.10.1;
option tftp-server-name "10.10.10.1";
filename "pxelinux.0";
range 10.10.10.2 10.10.10.254;
}
}
group {
option routers 10.10.10.1;
option domain-name "nemo.lan";
option domain-name-servers 10.10.10.1;
option ntp-servers 10.10.10.1;
default-lease-time 1800;
max-lease-time 7200;
}
}
dhcp 서비스 시작
/etc/init.d/isc-dhcp-server start
iPXE 설치
cd /usr/src
git clone git://git.ipxe.org/ipxe.git
cd ipxe/src
make
cp ./bin/undionly.kpxe /var/lib/tftpboot/
wimboot 다운로드
cd /usr/src
wget http://git.ipxe.org/releases/wimboot/wimboot-latest.zip
unzip wimboot-latest.zip
cp wimboot-2.5.1-signed/wimboot /var/lib/tftpboot/
iPXE 스크립트 생성
cd /var/lib/tftpboot
vi win7.ipxe
#!ipxe
dhcp
set keep-san 1
sanhook iscsi:10.10.10.1::::iqn.2013-10.net.thebugshop:windows7
set boot-url tftp://10.10.10.1
initrd ${boot-url}/distros/windows/winpe4_amd64.iso
kernel ${boot-url}/memdisk iso raw
boot
디렉토리 생성
cd /var/lib/tftpboot
mkdir -p distros/windows
cd distros/windows
tftpboot 파일 수정
/etc/default/tftpd-hpa
cat /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
tftpd 시작
/etc/init.d/tftpd-hpa start
lkrn 다운로드
wget --no-check-certificate "https://rom-o-matic.eu/build.fcgi?BINARY=ipxe.lkrn&BINDIR=bin&REVISION=master&DEBUG=&EMBED.00script.ipxe=&general.h/PXE_STACK:=1&general.h/DOWNLOAD_PROTO_NFS:=1&general.h/SANBOOT_PROTO_ISCSI:=1&" -O /var/lib/tftpboot/ipxe.lkrn
pxelinux.cfg 구성
cd /var/lib/tftpboot
mkdir pxelinux.cfg
cd pxelinux.cfg
vi default
DEFAULT menu.c32
LABEL Windows 7 Install
MENU LABEL Windows 7 Install
KERNEL ipxe.lkrn
INITRD win7.ipxe
타켓 컴퓨터 pxe 부팅 모드 진입
윈도우 7 빈 이미지 파일 생성
cd /var/lib/tftpboot
dd if=/dev/zero of=/var/lib/tftpboot/windows7.img bs=1M count=20000
iscsi 타켓 수정
vi /etc/default/iscsitarget
ISCSITARGET_ENABLE=true
ISCSITARGET_MAX_SLEEP=3
# ietd options
# See ietd(8) for details
ISCSITARGET_OPTIONS=""
ietd.conf 수정
vi /etc/iet/ietd.conf
Target iqn.2013-10.net.thebugshop:windows7
IncomingUser
OutgoingUser
Lun 0 Path=/var/lib/tftpboot/windows7.img,Type=fileio
Alias Windows7
서비스 시작
/etc/init.d/iscsitarget start
ADK 다운로드 설치
http://www.microsoft.com/en-US/download/details.aspx?id=39982
AIK 다운로드 설치
http://www.microsoft.com/en-us/download/details.aspx?id=5753
내 컴퓨터> 등록 정보> 고급 시스템 설정> 환경 변수> 시스템 변수> 경로> 편집
다음 내용 추가
;C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment
배포 및 이미지 환경
cd \
copype amd64 C:\WinPE_amd64
cd WinPE_amd64
mkdir ISO
copy "c:\Program Files\Windows AIK\Tools\PETools\amd64\winpe.wim" c:\WinPE_amd64\ISO\
copy "C:\Program Files\Windows AIK\Tools\amd64\Imagex.exe" C:\Winpe_amd64\ISO\
MakeWinPEMedia /ISO C:\WinPE_amd64 C:\WinPE_amd64\winpe4_amd64.iso
winpe4_amd64.iso를 /var/lib/tftpboot/distros/windows/ 서버 복사(winscp)
pxe 부팅화면 확인
삼바 설정
mkdir -p /var/lib/tftpboot/windows/win7
mkdir /mnt/cdrom
mount -o loop win7.iso /mnt/cdrom
cp -R /mnt/cdrom/*
[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
panic action = /usr/share/samba/panic-action %d
server role = standalone server
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
usershare allow guests = yes
[win7]
path = /var/lib/tftpboot/windows/win7
comment = Windows 7 Installation DVD
valid users = "bugshop"
writeable = no
browseable = yes
read only = yes
암호설정
useradd bugshop
smbpasswd -a bugshop
서비스 시작
service smbd start
service nmbd start
파일 생성
vi /var/lib/tftpboot/win7.iscsi
#!ipxe
dhcp set keep-san 1
sanboot iscsi:192.168.69.1::::iqn.2013-10.net.thebugshop:windows7
boot
vi /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
LABEL Windows 7
MENU LABEL Windows 7
KERNEL ipxe.lkrn
INITRD win7.iscsi
LABEL Windows 7 Install
MENU LABEL Windows 7 Install
KERNEL ipxe.lkrn
INITRD win7.ipxe
윈도우 설치 시작
das: 블록 전송 방식(서버에 직접 접근 작업)
iscsi 프로토콜을 사용해 NAS를 DAS 처럼 사용 한다.
스토리지 장비에서 반틈을 das, 또 다른 반틈은 NAS를 사용할 때 iscsi 방식을 사용한다.
iPXE 부팅
필수 패키지 설치
apt-get -y install tftpd-hpa isc-dhcp-server build-essential samba liblzma-dev mkisofs unzip iscsitarget
syslinux 다운로드 및 설치
cd /usr/src
mkdir pxe
cd pxe
wget https://www.kernel.org/pub/linux/utils/boot/syslinux/6.xx/syslinux-6.03.tar.gz
tar -zxvf syslinux-6.03.tar.gz
cd syslinux-6.0.3
make #this will fail, it's ok
cp ./bios/core/pxelinux.0 /var/lib/tftpboot/
cp ./bios/com32/elflink/ldlinux/ldlinux.c32 /var/lib/tftpboot/
cp ./bios/com32/libutil/libutil.c32 /var/lib/tftpboot/
cp ./bios/com32/menu/menu.c32 /var/lib/tftpboot/
cp ./bios/memdisk/memdisk /var/lib/tftpboot/
dhcpd eth1 적용
auth eth1
iface eth1 inet static
address 192.168.69.1
netmask 255.255.255.0
인터페이스 활성화
ifup eth1
DHCP 구성 설정 파일 /etc/dhcp/dhpcd.conf 추가
cat /etc/dhcp/dhcpd.conf
# DHCP server is authoritative for all networks
authoritative;
# extra options
# RFC3442 routes
option rfc3442-classless-static-routes code 121 = array of integer 8;
# MS routes
option ms-classless-static-routes code 249 = array of integer 8;
pid-file-name "/var/run/dhcp-server/dhcpd.pid";
ddns-update-style none;
option domain-name-servers 127.0.0.1;
allow booting;
allow bootp;
default-lease-time 1800;
max-lease-time 7200;
shared-network eth1 {
subnet 10.10.10.0 netmask 255.255.255.0 {
option routers 10.10.10.1;
option domain-name "nemo.lan";
option domain-name-servers 10.10.10.1;
option ntp-servers 10.10.10.1;
default-lease-time 1800;
max-lease-time 7200;
pool {
next-server 10.10.10.1;
option tftp-server-name "10.10.10.1";
filename "pxelinux.0";
range 10.10.10.2 10.10.10.254;
}
}
group {
option routers 10.10.10.1;
option domain-name "nemo.lan";
option domain-name-servers 10.10.10.1;
option ntp-servers 10.10.10.1;
default-lease-time 1800;
max-lease-time 7200;
}
}
dhcp 서비스 시작
/etc/init.d/isc-dhcp-server start
iPXE 설치
cd /usr/src
git clone git://git.ipxe.org/ipxe.git
cd ipxe/src
make
cp ./bin/undionly.kpxe /var/lib/tftpboot/
wimboot 다운로드
cd /usr/src
wget http://git.ipxe.org/releases/wimboot/wimboot-latest.zip
unzip wimboot-latest.zip
cp wimboot-2.5.1-signed/wimboot /var/lib/tftpboot/
iPXE 스크립트 생성
cd /var/lib/tftpboot
vi win7.ipxe
#!ipxe
dhcp
set keep-san 1
sanhook iscsi:10.10.10.1::::iqn.2013-10.net.thebugshop:windows7
set boot-url tftp://10.10.10.1
initrd ${boot-url}/distros/windows/winpe4_amd64.iso
kernel ${boot-url}/memdisk iso raw
boot
디렉토리 생성
cd /var/lib/tftpboot
mkdir -p distros/windows
cd distros/windows
tftpboot 파일 수정
/etc/default/tftpd-hpa
cat /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
tftpd 시작
/etc/init.d/tftpd-hpa start
lkrn 다운로드
wget --no-check-certificate "https://rom-o-matic.eu/build.fcgi?BINARY=ipxe.lkrn&BINDIR=bin&REVISION=master&DEBUG=&EMBED.00script.ipxe=&general.h/PXE_STACK:=1&general.h/DOWNLOAD_PROTO_NFS:=1&general.h/SANBOOT_PROTO_ISCSI:=1&" -O /var/lib/tftpboot/ipxe.lkrn
pxelinux.cfg 구성
cd /var/lib/tftpboot
mkdir pxelinux.cfg
cd pxelinux.cfg
vi default
DEFAULT menu.c32
LABEL Windows 7 Install
MENU LABEL Windows 7 Install
KERNEL ipxe.lkrn
INITRD win7.ipxe
타켓 컴퓨터 pxe 부팅 모드 진입
윈도우 7 빈 이미지 파일 생성
cd /var/lib/tftpboot
dd if=/dev/zero of=/var/lib/tftpboot/windows7.img bs=1M count=20000
iscsi 타켓 수정
vi /etc/default/iscsitarget
ISCSITARGET_ENABLE=true
ISCSITARGET_MAX_SLEEP=3
# ietd options
# See ietd(8) for details
ISCSITARGET_OPTIONS=""
ietd.conf 수정
vi /etc/iet/ietd.conf
Target iqn.2013-10.net.thebugshop:windows7
IncomingUser
OutgoingUser
Lun 0 Path=/var/lib/tftpboot/windows7.img,Type=fileio
Alias Windows7
서비스 시작
/etc/init.d/iscsitarget start
ADK 다운로드 설치
http://www.microsoft.com/en-US/download/details.aspx?id=39982
AIK 다운로드 설치
http://www.microsoft.com/en-us/download/details.aspx?id=5753
내 컴퓨터> 등록 정보> 고급 시스템 설정> 환경 변수> 시스템 변수> 경로> 편집
다음 내용 추가
;C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment
배포 및 이미지 환경
cd \
copype amd64 C:\WinPE_amd64
cd WinPE_amd64
mkdir ISO
copy "c:\Program Files\Windows AIK\Tools\PETools\amd64\winpe.wim" c:\WinPE_amd64\ISO\
copy "C:\Program Files\Windows AIK\Tools\amd64\Imagex.exe" C:\Winpe_amd64\ISO\
MakeWinPEMedia /ISO C:\WinPE_amd64 C:\WinPE_amd64\winpe4_amd64.iso
winpe4_amd64.iso를 /var/lib/tftpboot/distros/windows/ 서버 복사(winscp)
pxe 부팅화면 확인
삼바 설정
mkdir -p /var/lib/tftpboot/windows/win7
mkdir /mnt/cdrom
mount -o loop win7.iso /mnt/cdrom
cp -R /mnt/cdrom/*
[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
panic action = /usr/share/samba/panic-action %d
server role = standalone server
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
usershare allow guests = yes
[win7]
path = /var/lib/tftpboot/windows/win7
comment = Windows 7 Installation DVD
valid users = "bugshop"
writeable = no
browseable = yes
read only = yes
암호설정
useradd bugshop
smbpasswd -a bugshop
서비스 시작
service smbd start
service nmbd start
파일 생성
vi /var/lib/tftpboot/win7.iscsi
#!ipxe
dhcp set keep-san 1
sanboot iscsi:192.168.69.1::::iqn.2013-10.net.thebugshop:windows7
boot
vi /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
LABEL Windows 7
MENU LABEL Windows 7
KERNEL ipxe.lkrn
INITRD win7.iscsi
LABEL Windows 7 Install
MENU LABEL Windows 7 Install
KERNEL ipxe.lkrn
INITRD win7.ipxe
윈도우 설치 시작
syslinux 사용 tftpboot windows7 pxe install
1. 유틸 다운로드
apt-get install isc-dhcp-server tftpd-hpa syslinux ntf-kernel-server initramfs-tools
vmliuz : 리눅스 커널을 컴파일한 바이너리 파일을 압축한 것으로 리눅스 부팅 시 이 파일의 압축을 해제하여 메모리 적재
initrd : 커널 모듈을 모아 놓은 이미지로 커널이 로딩되기 전에 메모리에 로딩된다.
pxelinux.0 : 네트워크 부트 로더로 리눅스의 grub나 lilo의 역할을 한다. (OS 상관없이 tftp 기본 디렉터리에 하나만 있으면 된다.)
menu.c32 : PXE 부팅 메뉴를 꾸밀 수 있게 해주는 파일
2. 필요파일 복사.
윈도우즈 커널
cp /usr/lib/syslinux/memdisk /var/lib/tftpboot/
syslinux 부팅 파일 복사
cp /usr/lib/syslinux/pxelinux.0 /var/lib//tftpboot/
cp /usr/lib//syslinux/menu.c32 /var/lib/tftpboot/
3. 부팅 TUI 메뉴 구성
DEFAULT menu.c32 : menu UI 파일 지정
timeout 100 : 자동 선택 시간
mkdir /var/lib/tftpboot/pxelinux.cfg
vi /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
timeout 100
menu title ### OS Installer Boot Menu ###
LABEL
menu label --Windows-------------------------------------------------------
LABEL Windows7
menu label Windows7
kernel memdisk
initrd Windows7/Windows7.iso
APPEND iso raw
4. 윈도우7 자동 설치 키트 다운로드
https://www.microsoft.com/ko-kr/download/details.aspx?id=5753
5. 윈도우 PE 부팅을 위한 저장소 등록
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install wimtools
부팅 ios 이미지 형식 생성 패키지
sudo apt-get install genisoimage
cab 확장자 압축해제
sudo apt-get install cabextract
다운로드 파일 마운트
mount image_file.iso /mnt
부팅 이미지 제작
mkwinpeimg --iso --arch=amd64 --waik-dir=/mnt /var/lib/tftpboot/winpe.iso
umount /mnt
6. 삼바설정
path = /var/lib/tftpboot/Windows7/64bit
browseable = yes
writable = yes
guest ok = yes
read only = no
/etc/init.d/samba4 restart
/etc/init.d/smbd restart
/etc/init.d/nmbd restart
7. 윈도우 설치 명령어.
삼바 공유 파일 검색
net view
서버 이름 확인
net view \\서버이름
공유 디렉토리 확인
드라이버 할당
net use z: \\서버이름\\공유디렉토리
경로 이동
z:
설치 파일 이동후 설치
setup.exe
apt-get install isc-dhcp-server tftpd-hpa syslinux ntf-kernel-server initramfs-tools
vmliuz : 리눅스 커널을 컴파일한 바이너리 파일을 압축한 것으로 리눅스 부팅 시 이 파일의 압축을 해제하여 메모리 적재
initrd : 커널 모듈을 모아 놓은 이미지로 커널이 로딩되기 전에 메모리에 로딩된다.
pxelinux.0 : 네트워크 부트 로더로 리눅스의 grub나 lilo의 역할을 한다. (OS 상관없이 tftp 기본 디렉터리에 하나만 있으면 된다.)
menu.c32 : PXE 부팅 메뉴를 꾸밀 수 있게 해주는 파일
2. 필요파일 복사.
윈도우즈 커널
cp /usr/lib/syslinux/memdisk /var/lib/tftpboot/
syslinux 부팅 파일 복사
cp /usr/lib/syslinux/pxelinux.0 /var/lib//tftpboot/
cp /usr/lib//syslinux/menu.c32 /var/lib/tftpboot/
3. 부팅 TUI 메뉴 구성
DEFAULT menu.c32 : menu UI 파일 지정
timeout 100 : 자동 선택 시간
mkdir /var/lib/tftpboot/pxelinux.cfg
vi /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
timeout 100
menu title ### OS Installer Boot Menu ###
LABEL
menu label --Windows-------------------------------------------------------
LABEL Windows7
menu label Windows7
kernel memdisk
initrd Windows7/Windows7.iso
APPEND iso raw
4. 윈도우7 자동 설치 키트 다운로드
https://www.microsoft.com/ko-kr/download/details.aspx?id=5753
5. 윈도우 PE 부팅을 위한 저장소 등록
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install wimtools
부팅 ios 이미지 형식 생성 패키지
sudo apt-get install genisoimage
cab 확장자 압축해제
sudo apt-get install cabextract
다운로드 파일 마운트
mount image_file.iso /mnt
부팅 이미지 제작
mkwinpeimg --iso --arch=amd64 --waik-dir=/mnt /var/lib/tftpboot/winpe.iso
umount /mnt
6. 삼바설정
path = /var/lib/tftpboot/Windows7/64bit
browseable = yes
writable = yes
guest ok = yes
read only = no
/etc/init.d/samba4 restart
/etc/init.d/smbd restart
/etc/init.d/nmbd restart
7. 윈도우 설치 명령어.
삼바 공유 파일 검색
net view
서버 이름 확인
net view \\서버이름
공유 디렉토리 확인
드라이버 할당
net use z: \\서버이름\\공유디렉토리
경로 이동
z:
설치 파일 이동후 설치
setup.exe
tftpboot windows 10 install
필수 패키지 설치
apt-get update
apt-get install -y samba genisoimage wimtools cabextract
mkisofs 링크
ln -s /usr/bin/genisoimage /usr/bin/mkisofs
디렉토리 생성
mkdir -p /mnt/waik
mkdir -p /var/lib/tftpboot/windows
다운로드
https://www.microsoft.com/en-us/download/confirmation.aspx?id=5753
wget https://download.microsoft.com/download/8/E/9/8E9BBC64-E6F8-457C-9B8D-F6C9A16E6D6A/KB3AIK_EN.iso
다운로드 파일 마운트
mount KB3AIK_EN.iso /mnt/waik
부팅 이미지 생성
mkwinpeimg --iso --arch=amd64 --waik-dir=/mnt/waik /var/lib/tftpboot/winpe.iso
마운트 해제
umount /mnt/waik
삼바 설정
vi /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
map to guest = bad user
usershare allow guests = yes
[windows]
browsable = true
read only = yes
guest ok = yes
path = /var/lib/tftpboot/windows
공유 서비스 시작
systemctl restart smbd
12.04 일때
/etc/init.d/samba4 restart
/etc/init.d/smbd restart
/etc/init.d/nmbd restart
윈도우 10 마운트
mount <WINDOWS_ISO> /var/lib/tftpboot/windows
램디스크 심볼 생성
ln -s /usr/lib/syslinux/memdisk /var/lib/tftpboot/
PXE 부팅 메뉴 생성
vi /var/lib/tftpboot/pxelinux.cfg/default
LABEL windows10
MENU LABEL Windows 10
KERNEL /memdisk
INITRD /winpe.iso
APPEND iso raw
윈도우 설치
PXE 부팅
DHCP 할당 IP 대기
마운트
net use Z:\\IPADDRESS\windows
실행
z:\setup.exe
apt-get update
apt-get install -y samba genisoimage wimtools cabextract
mkisofs 링크
ln -s /usr/bin/genisoimage /usr/bin/mkisofs
디렉토리 생성
mkdir -p /mnt/waik
mkdir -p /var/lib/tftpboot/windows
다운로드
https://www.microsoft.com/en-us/download/confirmation.aspx?id=5753
wget https://download.microsoft.com/download/8/E/9/8E9BBC64-E6F8-457C-9B8D-F6C9A16E6D6A/KB3AIK_EN.iso
다운로드 파일 마운트
mount KB3AIK_EN.iso /mnt/waik
부팅 이미지 생성
mkwinpeimg --iso --arch=amd64 --waik-dir=/mnt/waik /var/lib/tftpboot/winpe.iso
마운트 해제
umount /mnt/waik
삼바 설정
vi /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
map to guest = bad user
usershare allow guests = yes
[windows]
browsable = true
read only = yes
guest ok = yes
path = /var/lib/tftpboot/windows
공유 서비스 시작
systemctl restart smbd
12.04 일때
/etc/init.d/samba4 restart
/etc/init.d/smbd restart
/etc/init.d/nmbd restart
윈도우 10 마운트
mount <WINDOWS_ISO> /var/lib/tftpboot/windows
램디스크 심볼 생성
ln -s /usr/lib/syslinux/memdisk /var/lib/tftpboot/
PXE 부팅 메뉴 생성
vi /var/lib/tftpboot/pxelinux.cfg/default
LABEL windows10
MENU LABEL Windows 10
KERNEL /memdisk
INITRD /winpe.iso
APPEND iso raw
윈도우 설치
PXE 부팅
DHCP 할당 IP 대기
마운트
net use Z:\\IPADDRESS\windows
실행
z:\setup.exe
2019/01/21
UEFI, BIOS MBR 윈도우 10 설치 요약
UEFI 설정
- BIOS 호환 모드(CSM 또는 BIOS) 부팅시 GParted 파일 관리자만 있으면 됨.
ISO 구성시 UEFI 구성 확인
- winusb 또는 woeusb로 운영체제 설치를 만들 경우 자동으로 생성.
UEFI 펌웨어 부팅 USB 생성 방법.
BIOS MBR 파티션 구성
1. USB 드라이버 GPT 파티션 테이블 생성.
GParted 사용해 usb 파티션 테이블 msdos를 ntfs 포맷 후 부트 플래그 추가
2. GParted 실행 후 USB 파티션 오른쪽 마우스 클릭 정보 선택 UUID 복사
3. 윈도우 ISO 파일을 마운트 모든 파일 USB 복사
4. usb 이동 후 boot 디렉토리 대문자 일 경우 소문자로 변경
5. usb 부트로더 grup 설치
sudo grub-install --target=i386-pc --boot-directory="/<USB_mount_folder>/boot" /dev/sdX
6. grub 구성 파일 생성
cd usb/boot/grub
vi grub.conf
echo "If you see this, you have successfully booted from USB :)"
insmod ntfs
insmod search_fs_uuid
search --no-floppy --fs-uuid <UUID_복사한 값 붙여넣기> --set root
ntldr /bootmgr
boot
7. USB 마운트 해제
8. USB 부팅 확인
UEFI GPT 파티션 구성
윈도우에서 GPT 파티션 지원 ISO 확인
자세한 내용 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/hh824898(v=win.10)
1. Gparted 사용 USB GPT 파티션 테이블 생성
2. 주 파티션 생성 후 fat32 포맷
3. 윈도우 ISO 파일 내용 USB 복사
4. USB 부트로더 수정
efi/boot 이동
bootx64.efi(bootia32.efi) 파일 존재 여부 확인
4.1 bootxxx.efi 없을 경우
sources/install.wim 7z 프로그램을 사용 파일 열기
./1/Windows/Boot/EFI 이동후 bootmgfw.efi 이름 bootxxx.efi 변경
efi/boot 복사
4.2 윈도우 7 USB 일 경우
boot/efi/microsoft 에 efi 폴더 복사
5. USB 드라이브 마운트 해제, BIOS에서 EFI 로더 선택
- BIOS 호환 모드(CSM 또는 BIOS) 부팅시 GParted 파일 관리자만 있으면 됨.
ISO 구성시 UEFI 구성 확인
- winusb 또는 woeusb로 운영체제 설치를 만들 경우 자동으로 생성.
UEFI 펌웨어 부팅 USB 생성 방법.
BIOS MBR 파티션 구성
1. USB 드라이버 GPT 파티션 테이블 생성.
GParted 사용해 usb 파티션 테이블 msdos를 ntfs 포맷 후 부트 플래그 추가
2. GParted 실행 후 USB 파티션 오른쪽 마우스 클릭 정보 선택 UUID 복사
3. 윈도우 ISO 파일을 마운트 모든 파일 USB 복사
4. usb 이동 후 boot 디렉토리 대문자 일 경우 소문자로 변경
5. usb 부트로더 grup 설치
sudo grub-install --target=i386-pc --boot-directory="/<USB_mount_folder>/boot" /dev/sdX
6. grub 구성 파일 생성
cd usb/boot/grub
vi grub.conf
echo "If you see this, you have successfully booted from USB :)"
insmod ntfs
insmod search_fs_uuid
search --no-floppy --fs-uuid <UUID_복사한 값 붙여넣기> --set root
ntldr /bootmgr
boot
7. USB 마운트 해제
8. USB 부팅 확인
UEFI GPT 파티션 구성
윈도우에서 GPT 파티션 지원 ISO 확인
자세한 내용 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/hh824898(v=win.10)
1. Gparted 사용 USB GPT 파티션 테이블 생성
2. 주 파티션 생성 후 fat32 포맷
3. 윈도우 ISO 파일 내용 USB 복사
4. USB 부트로더 수정
efi/boot 이동
bootx64.efi(bootia32.efi) 파일 존재 여부 확인
4.1 bootxxx.efi 없을 경우
sources/install.wim 7z 프로그램을 사용 파일 열기
./1/Windows/Boot/EFI 이동후 bootmgfw.efi 이름 bootxxx.efi 변경
efi/boot 복사
4.2 윈도우 7 USB 일 경우
boot/efi/microsoft 에 efi 폴더 복사
5. USB 드라이브 마운트 해제, BIOS에서 EFI 로더 선택
2019/01/20
ubuntu 18.04 cuda9.2 install
nvidia 확인
lspci | grep NVIDIA
nvidia 드라이버 설치
https://nautilusleenssi.blogspot.com/2019/01/ubuntu-1804-drvier-nvidia.html
현대 드라이버 설치 버전 nvidia-390 사용.
sudo apt-get install gcc-6 g++-6 linux-headers-$(uname -r) -y
CUDA Toolkit 설치
다운로드
wget -O cuda_9.2.88_396.26_linux.run -c https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda_9.2.88_396.26_linux
실행
sudo chmod +x cuda_9.2.88_396.26_linux.run
sudo ./cuda_9.2.88_396.26_linux.run --verbose --silent --toolkit --override
설치 성공 메시지 확인
===========
= Summary =
===========
Toolkit: Installed in /usr/local/cuda-9.2
Samples: Not Selected
Please make sure that
- PATH includes /usr/local/cuda-9.2/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-9.2/lib64, or, add /usr/local/cuda-9.2/lib64 to /etc/ld.so.conf and run ldconfig as root
bashrc 설정
vi ~/.bashrc
export PATH="$PATH:/usr/local/cuda-9.2/bin"
동적 라이브러리 경로 지정
sudo echo "/usr/local/cuda-9.2/lib64" >> /etc/ld.so.conf
또는
vi /etc/ld.so.conf.d/cuda9-2.conf
/usr/local/cuda-9.2/lib64
sudo ldconfig
NVIDIA 패치 적용
wget https://developer.nvidia.com/compute/cuda/9.2/Prod/patches/1/cuda_9.2.88.1_linux
sudo chmod +x cuda_9.2.88.1_linux
sudo ./cuda_9.2.88.1_linux --silent --accept-eula
패치 설정 메시지 확인
Welcome to the CUDA Patcher.
Installation complete!
Installation directory: /usr/local/cuda-9.2
gcc 버전 설정
sudo ln -s /usr/bin/gcc-6 /usr/local/cuda-9.2/bin/gcc
sudo ln -s /usr/bin/g++-6 /usr/local/cuda-9.2/bin/g++
lspci | grep NVIDIA
nvidia 드라이버 설치
https://nautilusleenssi.blogspot.com/2019/01/ubuntu-1804-drvier-nvidia.html
현대 드라이버 설치 버전 nvidia-390 사용.
sudo apt-get install gcc-6 g++-6 linux-headers-$(uname -r) -y
CUDA Toolkit 설치
다운로드
wget -O cuda_9.2.88_396.26_linux.run -c https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda_9.2.88_396.26_linux
실행
sudo chmod +x cuda_9.2.88_396.26_linux.run
sudo ./cuda_9.2.88_396.26_linux.run --verbose --silent --toolkit --override
설치 성공 메시지 확인
===========
= Summary =
===========
Toolkit: Installed in /usr/local/cuda-9.2
Samples: Not Selected
Please make sure that
- PATH includes /usr/local/cuda-9.2/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-9.2/lib64, or, add /usr/local/cuda-9.2/lib64 to /etc/ld.so.conf and run ldconfig as root
bashrc 설정
vi ~/.bashrc
export PATH="$PATH:/usr/local/cuda-9.2/bin"
동적 라이브러리 경로 지정
sudo echo "/usr/local/cuda-9.2/lib64" >> /etc/ld.so.conf
또는
vi /etc/ld.so.conf.d/cuda9-2.conf
/usr/local/cuda-9.2/lib64
sudo ldconfig
NVIDIA 패치 적용
wget https://developer.nvidia.com/compute/cuda/9.2/Prod/patches/1/cuda_9.2.88.1_linux
sudo chmod +x cuda_9.2.88.1_linux
sudo ./cuda_9.2.88.1_linux --silent --accept-eula
패치 설정 메시지 확인
Welcome to the CUDA Patcher.
Installation complete!
Installation directory: /usr/local/cuda-9.2
gcc 버전 설정
sudo ln -s /usr/bin/gcc-6 /usr/local/cuda-9.2/bin/gcc
sudo ln -s /usr/bin/g++-6 /usr/local/cuda-9.2/bin/g++
ubuntu 18.04 drvier 자동 검색 설치(NVIDIA)
1. 자동 설치
드라이버 검색
ubuntu-drivers devices
출력 정보 확인
== /sys/devices/pci0000:00/0000:00:03.1/0000:20:00.0 ==
modalias : pci:v000010DEd00001B80sv00001458sd00003702bc03sc00i00
vendor : NVIDIA Corporation
model : GP104 [GeForce GTX 1080]
driver : nvidia-396 - third-party non-free
driver : nvidia-driver-390 - distro non-free recommended
driver : xserver-xorg-video-nouveau - distro free builtin
드라이버 설치
sudo ubuntu-drivers autoinstall
특정 버전 설치 할 경우
sudo apt install nvidia-390
2. 수동 설치
설치된 드라이버 검색
dpkg --get-selections | grep nvidia
기존 설치 드라이버 삭제
sudo apt-get purge nvidia*
최신 드라이버 설치 파일 다운로드
https://www.nvidia.com/Download/index.aspx
설치
sudo sh NVIDIA-Linux-x86_64-390.48.run
지원하는 카드 목록 확인.
NVIDIA TITAN 시리즈
Geforce MX 100 시리즈(노트북)
Geforce 10 시리즈
현재 사용하는 건 geforce gtx 1070
reboot
설치 확인
nvidia-smi
UEFI 설정
보안부팅 리눅스 변경 또는 사용 금지
Nouveau 비 활성화 전 확인 사항(GUI 모들 설정 현 드라이버 확인) system settings > details
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
모듈 확인
cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
커널 initramfs 생성
sudo update-initramfs -u
재 부팅
reboot
GUI 모드 설정 방법(현재 드라이버 확인 방법.)
system settings > details
변경.
softare & updates 또는 소프트웨어 & 업데이트
추가 드라이버 선택
NVIDI 선택
드라이버 업데이트 금지
sudo apt-mark hold nvidia-390
업데이트 금지 해제
sudo apt-mark unhold nvidia-390
드라이버 검색
ubuntu-drivers devices
출력 정보 확인
== /sys/devices/pci0000:00/0000:00:03.1/0000:20:00.0 ==
modalias : pci:v000010DEd00001B80sv00001458sd00003702bc03sc00i00
vendor : NVIDIA Corporation
model : GP104 [GeForce GTX 1080]
driver : nvidia-396 - third-party non-free
driver : nvidia-driver-390 - distro non-free recommended
driver : xserver-xorg-video-nouveau - distro free builtin
드라이버 설치
sudo ubuntu-drivers autoinstall
특정 버전 설치 할 경우
sudo apt install nvidia-390
2. 수동 설치
설치된 드라이버 검색
dpkg --get-selections | grep nvidia
기존 설치 드라이버 삭제
sudo apt-get purge nvidia*
최신 드라이버 설치 파일 다운로드
https://www.nvidia.com/Download/index.aspx
- 제품 유형 : GeForce
- 제품 시리즈 : GeForce 10 시리즈
- 제품 GeForce GTX 1080
- 운영 체제 : Linux 64 비트
- 언어 : 영어
설치
sudo sh NVIDIA-Linux-x86_64-390.48.run
지원하는 카드 목록 확인.
NVIDIA TITAN 시리즈
Geforce MX 100 시리즈(노트북)
Geforce 10 시리즈
현재 사용하는 건 geforce gtx 1070
reboot
설치 확인
nvidia-smi
UEFI 설정
보안부팅 리눅스 변경 또는 사용 금지
Nouveau 비 활성화 전 확인 사항(GUI 모들 설정 현 드라이버 확인) system settings > details
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
모듈 확인
cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
커널 initramfs 생성
sudo update-initramfs -u
재 부팅
reboot
GUI 모드 설정 방법(현재 드라이버 확인 방법.)
system settings > details
변경.
softare & updates 또는 소프트웨어 & 업데이트
추가 드라이버 선택
NVIDI 선택
드라이버 업데이트 금지
sudo apt-mark hold nvidia-390
업데이트 금지 해제
sudo apt-mark unhold nvidia-390
wget 사용법
URL 지정 다운로드
wget http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso
다수의 URL 지정 다운로드
wget <url_1> <url_2>
ftp 다운로드
wget ftp://ftp.example.com/ubuntu/ubuntu-18.04-desktop-amd64.iso
ftp 계정 및 패스워드 입력 다운로드
wget --ftp-user=booleanworld --ftp-password=passw0rd <ftp_url>
사용자 사용할 파일 이름 변경 다운로드
wget <url> -O Ubuntu.iso
사용자 디렉토리 지정 후 파일 다운로드
wget <url> -O /media/sdb1/Software/Ubuntu.iso
사용자 디렉토리 생성 후 다운로드
wget <url> -P /media/sdb1/Software
중단된 다운로드 시작
wget -c <url>
중단된 사용자 지정 파일 다운로드
wget -c <url> -O <path_to_downloaded_file>
다운로드 속도 조절
wget <url> --limit-rate=512k
백그라운드 파일 다운로드
wget -b <url>
tail -f wget-log
다운로드 확인 파일명.
wget-log, wget-log.1
실시간 파일 다운로드 확인
tail -f wget-log
인터넷 속도 문제(gwt 20회 접속)
wget -t inf --waitretry=3 --timeout=10 --retry-connrefused <url>
-t inf 스위치 : 문제 발생시 다운로드 완료할 때 까지 무한반복.
--waitretry 스위치 : 재시도 지연 3초
--timeout 스위치 : 네트워크 시간 초가 10 초 설정
--retry-connrefused 스위치 : 서버가 동작 않을때 "연결 거부 됨" 오류 발생, 연결 거부 오류가 발생시 다운로드 재시도.
재귀적 파일 다운로드.
wget 동작 방법 :
- 초기 파일 다운로드 저정 후 링크 검색.
- 각 랑크 다운로드 저장 후 링크 추출
- 기본 값으로 5개 링크 추출
페이지 반복적 다운로드
wget -r https://en.wikipedia.org/
-l 플래그 사용 재귀 호출 수 지정 7
wget -r -l 7 https://en.wikipedia.org/
-A(허용) 옵션을 사용 특정 유형의 파일 다운로드
wget -r https://en.wikipedia.org/ -A png,jpg,jpeg
-R(거부) 옵션을 사용 특정 유형의 파일 다운로드 금지
wget -r https://en.wikipedia.org/ -R pdf
-k 링크 변환기능, 웹 페이지 링크를 로컬 링크로 변환
wget -k -r https://en.wikipedia.org/
wget 사이트 차단될 경우, 사용자 문자열 지정을 통해 다운로드
wget <url> -U "<user-agent-string>"
Mac 사용자 문자열 지정 다운로드
wget <url> -U "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
웹 개발자 http 헤더 테스트
wget <url> --header "X-Foo: 123"
보호된 파일 다운로드
크롬
https://chrome.google.com/webstore/detail/curlwget/jmocjfidanebdlinpbcdgcmgdifblncg?hl=en
filrefox
https://addons.mozilla.org/en-US/firefox/addon/cliget/
웹 사이트 링크 깨짐 해결.
wget --spider -r https://example.com/
웹 사이트 링크 깨짐 해결 로그 설정.
wget --spider -r https://example.com -o wget.log
301 리다디렉션 검색.
grep -B 301 wget.log
wget http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso
다수의 URL 지정 다운로드
wget <url_1> <url_2>
ftp 다운로드
wget ftp://ftp.example.com/ubuntu/ubuntu-18.04-desktop-amd64.iso
ftp 계정 및 패스워드 입력 다운로드
wget --ftp-user=booleanworld --ftp-password=passw0rd <ftp_url>
사용자 사용할 파일 이름 변경 다운로드
wget <url> -O Ubuntu.iso
사용자 디렉토리 지정 후 파일 다운로드
wget <url> -O /media/sdb1/Software/Ubuntu.iso
사용자 디렉토리 생성 후 다운로드
wget <url> -P /media/sdb1/Software
중단된 다운로드 시작
wget -c <url>
중단된 사용자 지정 파일 다운로드
wget -c <url> -O <path_to_downloaded_file>
다운로드 속도 조절
wget <url> --limit-rate=512k
백그라운드 파일 다운로드
wget -b <url>
tail -f wget-log
다운로드 확인 파일명.
wget-log, wget-log.1
실시간 파일 다운로드 확인
tail -f wget-log
인터넷 속도 문제(gwt 20회 접속)
wget -t inf --waitretry=3 --timeout=10 --retry-connrefused <url>
-t inf 스위치 : 문제 발생시 다운로드 완료할 때 까지 무한반복.
--waitretry 스위치 : 재시도 지연 3초
--timeout 스위치 : 네트워크 시간 초가 10 초 설정
--retry-connrefused 스위치 : 서버가 동작 않을때 "연결 거부 됨" 오류 발생, 연결 거부 오류가 발생시 다운로드 재시도.
재귀적 파일 다운로드.
wget 동작 방법 :
- 초기 파일 다운로드 저정 후 링크 검색.
- 각 랑크 다운로드 저장 후 링크 추출
- 기본 값으로 5개 링크 추출
페이지 반복적 다운로드
wget -r https://en.wikipedia.org/
-l 플래그 사용 재귀 호출 수 지정 7
wget -r -l 7 https://en.wikipedia.org/
-A(허용) 옵션을 사용 특정 유형의 파일 다운로드
wget -r https://en.wikipedia.org/ -A png,jpg,jpeg
-R(거부) 옵션을 사용 특정 유형의 파일 다운로드 금지
wget -r https://en.wikipedia.org/ -R pdf
-k 링크 변환기능, 웹 페이지 링크를 로컬 링크로 변환
wget -k -r https://en.wikipedia.org/
wget 사이트 차단될 경우, 사용자 문자열 지정을 통해 다운로드
wget <url> -U "<user-agent-string>"
Mac 사용자 문자열 지정 다운로드
wget <url> -U "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
웹 개발자 http 헤더 테스트
wget <url> --header "X-Foo: 123"
보호된 파일 다운로드
크롬
https://chrome.google.com/webstore/detail/curlwget/jmocjfidanebdlinpbcdgcmgdifblncg?hl=en
filrefox
https://addons.mozilla.org/en-US/firefox/addon/cliget/
웹 사이트 링크 깨짐 해결.
wget --spider -r https://example.com/
웹 사이트 링크 깨짐 해결 로그 설정.
wget --spider -r https://example.com -o wget.log
301 리다디렉션 검색.
grep -B 301 wget.log
ubuntu 18.04 desktop download
다운로드
wget http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-amd64.iso
무결성 확인
wget http://releases.ubuntu.com/18.04/SHA256SUMS
체크
sha256sum ubuntu-18.04.1-desktop-amd64.iso
5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433 ubuntu-18.04.1-desktop-amd64.iso
확인
cat SHA256SUMS
5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433 *ubuntu-18.04.1-desktop-amd64.iso
7b37dfcd082726303528e47c82f88f29c1dc9232f8fd39120d13749ae83cc463 *ubuntu-18.04.1.0-live-server-amd64.iso
wget http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-amd64.iso
무결성 확인
wget http://releases.ubuntu.com/18.04/SHA256SUMS
체크
sha256sum ubuntu-18.04.1-desktop-amd64.iso
5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433 ubuntu-18.04.1-desktop-amd64.iso
확인
cat SHA256SUMS
5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433 *ubuntu-18.04.1-desktop-amd64.iso
7b37dfcd082726303528e47c82f88f29c1dc9232f8fd39120d13749ae83cc463 *ubuntu-18.04.1.0-live-server-amd64.iso
BIOS, UEFI 정리
BIOS : Basic Input Output System 기본 입출력 동작 칩(휘발성)
CMOS : Complementary Metal-Oxide Semiconductor, 비휘발성 칩으로 BIOS 설정 값 저장
POST : Power-on self-test, CMOS에 설정된 하드웨어 점검.
UEFI : Unified Extensible Firmware Interface, 걍 대용량 하드디시크 3TB 인식 및 최신 부트로더 사용, 운영체제 선택
IBM 호환 컴퓨터 BIOS의 시대와 UEFI와 GPT 시대의 컴퓨터
BIOS, UEFI 펌웨어 유형.
BIOS 펌웨어:
- IBM PC(거의 대부분) 호환 컴퓨터.
- PC 펌웨어의 일반적 용어가 아니며 특정 유형의 펌웨어를 가르킴.
- BIOS 스팩이 따로 없으며, 사실성 표준(UEFI 존재하는 이유)
UEFI:
- 프로젝트 사이트: http://www.uefi.org
- 문서 다운로드 : http://www.uefi.org/sites/default/files/resources/2_4_Errata_A.pdf
- EFI 인텔에 의개 개발된후, fork 후 발전(회원사 HW:Intel,AMD SW:redhat, Mac, MS)
- IBM PC(거의 대부분) 호환 컴퓨터 지원.
- PC 펌웨어의 일반적 용어가 아니며 특정 유형의 펌웨어를 가르킴.
- UEFI BIOS 가지고 있지 않음.
- UEFI 2.2 보안 부팅 추가
- Secure Boot는 UEFI의 확장
BIOS 부팅
- 하드디스크 MBR(Master Boot Record) 영역
- BIOS 연동 코드 영역(MBR)
- 부팅 영역(부트 로더)
- BIOS 펌웨어가 하드디스크 MBR 영역 검색 해 부트로더 실행
- BIOS 펌웨어는 운영체제, 파티션 유형은 알 지 못하며 오로지 MBR영역의 부트로더를 실행한다.
- BIOS 펌웨어는 외부(통신 및 Netsork) 부팅 프로세스를 구성 할 수 있음.
UEFI 부팅 배경 지식
- BIOS 부팅 방식과 완전히 다름.
- UEFI, BIOS 펌웨어의 호환을 위해 CSM 구현.
- UEFI 펌웨어는 BIOS 펌웨어 부팅 방법 지원.(디스크 MBR 영역의 부트로더 실행)
- UEFI 펌웨어에서 BIOS 방식으로 부팅 UEFI 사용 중지 된 게 아님.
- 시스템의 설치된 UEFI 펌웨어를 비활성화 할 수 없음.
UEFI 기본 부팅: 실제 동작 방식
- BIOS 와 다르게 디스크 파티션, 부트 로더 및 운영체제 UEFI 펌웨어가 선택 할 수 있음.
- UEFI 펌웨어 방식은 문제 해결을 위해 다양한 비트 설정 방법을 통해 문제 해결을 하는데 도움을 줌.
- BIOS 펌웨어는 MBR 영역의 비트 설정만 할 수 있음.
- UEFI 펌웨어는 디스크 영역 앞에서 더 많은 일 처리를 할 수 있다는 의미가 됨.
BIOS MBR 방식 설정 문제
- 처리 불편. MBR 영역을 작성 하는데 응용 프로그램이 필요 함.
- MBR 영역에 최신 부트로더 사용시 충분한 크기를 제공하지 않음. MBR 512byte 크기를 같는다.
- 446Byte 부트코드, 64Byte 파티션 테이블, 2Byte 디스크 서명
- 부트코드: 부팅 가능한 파티션 검색 후 부트 섹터 호출
- 파티션 테이블: 16byte 4개의 파티션 영역. 3개 영역은 Primary Parttion(주파티션), 나머지 하나는 exten parttion(확장 파티션)
- 디스크 서명: 해당 하드디시크 식별하기 위한 2Byte 공유 ID 식별 정보.
- 최신 부트로더는 MBR 영역의 크기에 맞게 부트로더를 설치 하므로, 전체 기능을 사용하지 못한다.
- mbr 영역을 벗어난 부트로더 기능은 mbr(512Byte) 영역을 벗어난 하드디스크 첫번째 파티션 영역에 설치.
- 이러한 문제가 시스템 디자인 큰 문제 발생하 지만 신경 쓸 필요는 없다.
- 첫번째 파티션에 충분한 공간을 확인하기 어렵고, 만약 충분한 공간이 없다면 시스템 부팅시 문제 발생
- 하드디스크 부팅 디자인은 표준화된 방법은 제공하지 않음
- 다수의 운영체제를 선택해 부팅 하려면 BIOS/MBR 방식에서는 부트로더가 유일한 해결방법.
- UEFI 부팅의 경우 원격 서버에 부팅하는 표준 방법을 제공 함.
요약
초창기 제안 인텔.
GUID Partition Table, MBR은 최대 2.2TB 디스크 파티션을 영역 설정, GPT 최대 9.4ZB 디스크 파티션 영역 설정. GPT는 부트레코드 영역이 아니라 데이터 영역으로 사용해야 함.
GPT MBR 사용방안.
기존 Legacy 방식에서 새롭게 추가된 EFI 방식이 필요한 이유는 3TB HDD가 보급되기 시작, 기존 Legacy 방식으로는 GPT 3TB 이상의 HDD 포맷을 인식 할 수 없음. 메인보드의 바이오스 설정에도 GPT 파티션으로 된 HDD 운영체제를 설치하기 위해 UEFI가 추가. MBR과 GPT의 속도 차이는 GPT에서 조금 더 빠름.
UEFI가 아닌 Legacy 방식의 하드디스크는 MBR 방식으로 포맷되어 설치 됨(Linux의 경우 MSDOS 인식)
UEFI BIOS 방식의 하드디스크는 GPT 방식으로 포맷되어 설치 됨(Linux의 경우 GPT로 인식)
UEFI 펌웨어 방식은 개별 디스크 하나 당 부트 로더 코드를 상주 함.
부팅 로드를 처리 하기 위한 더 많은 인프라가 추가된 펌웨어 임.
인프라 추가 내용(EFI 실행파일, GPT, EFI 시스템 파티션)
EFI 실행파일
UEFI 펌웨어가 EFI 형식의 코드를 실행 할 수 있도록 작성 되어야 함.
GPT (GUID 파티션 테이블) 형식
GPT 파티션 테이블을 만들기 위한 표준으로 디스크 파티션 정보로 디스크 시작 부분에 정의됨.
MBR/MS-DOS 파티션 테이블 표준 보다 더 나은 표준을 제공(3TB) 이상 인식.
UEFI 펌웨어는 GPT 파티션(MBR)을 인식 할 수 있어야 함.
EFI 시스템 파티션
펌웨어는 특정 유형의 파일 시스템을 읽을 수 있음.
UEFI 펌웨어는 본질 적으로 FAT, FAT12, FAT16, FAT32 파일 지원.
파티션 테이블을 읽을 수 있다.
특정 파일 시스템의 파일에 접근 할 수 있다.
특정 현식으로 코드를 실행 할 수 있다.
UEFI 부팅 관리자
sudo apt-get install efibootmgr
efibootmgr은 UEFI 구성을 설정 제어하느데 사용되는 프로그램이다.
UEFI 부팅 관리자는 구조적으로 정의된 NVRAM 변수를 수정하여 구성 할 수 있는 펌웨어 정책이다.
부트 관리자는 UEFI 드라이버와 UEFI 응용 프로그램(UEFI OS 부트 로더 포함)을 NVRAM 전역 변수로 정의 된 순서대로 로드하려고 시도 한다.
BIOS 펌웨어는 부트 메뉴에서 시스템에 연결된 하드디스키가 필연적으로 연결 된다.
UEFI 펌웨어에서는 이러한 방식은 해당 사항이 없다.
UEFI 부팅 관리자 구성은 "부팅 메뉴"에서 항목을 추가 제거 할 수 있음
운영체제가 부팅된 후 시스템 부팅 설정을 구성 할 수 있다.
modprobe efivars
efibootmgr -v
BootCurrent: 0000 ---> 부트 메뉴 항목
Timeout: 2 seconds ---> 대기 시간
BootOrder: 0000,0004,0002,0003 ---> 부트 시퀀서
Boot0000* ubuntu HD(1,800,f3800,053af52d-919d-4762-9def-19de4664b680)File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0002* Hard Drive BIOS(2,0,00)..GO..NO........o.e.s....................A...........................>..Gd-.;.A..MQ..L.E.D.9.D.7.0.A.8.7.1.C.E.5.0.5.8.7.3.7.0........BO
Boot0003* UEFI: Built-in EFI Shell Vendor(5023b95c-db26-429b-a648-bd47664c8012,)..BO
Boot0004* ubuntu HD(1,800,f3800,053af52d-919d-4762-9def-19de4664b680)File(\EFI\UBUNTU\GRUBX64.EFI)
UEFI 기본 부팅: 실제 동작 방식 - 부팅 관리자 항목
- EFI_DEVICE_PATH_PROTOCOL 섹션(부팅 이외의 다른 용도로 사용되는 일반적 프로토콜)
-- 비디오 카드 부팅 시도 하지 않음
-- PXE 서버 설정
-- 노 디스크 설정
부팅 프로세스 구성(운영체제)
efibootmgr 명령어를 사용해 구성 할 수 있음.
자세한 내용은 맨 페이지 참고.
이 모드를 사용하려면 BIOS 변경 필요(EFI, UEFI 활성화)
펌웨어의 UI 화면 갱신이 안될 수 도 있음.
UEFI 기본 및 BIOS 호환 부팅
EFI 시스템 파티션에 쓰고, UEFI 항목을 추가
BIOS 호환성 모드로 부팅하면 운영 체제는 BIOS 호환 설치로 운영체제 설치(MBR 유형의 부트로 사용)
부팅 모드 찾기
efibootmgr -v
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
dmesg 확인 및 커널 로그 확인해 어떠한 부팅 모드인지 확인 가능
UEFI 기본 부팅 사용
라이브 CD 제작 후 usb 스틱에 기록 할 때 -efi 매개 변수 사용해 UEFI 부팅 가능
디스크 형식 ( MBR VS GPT)
sudo parted /dev/sda
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: ATA C300-CTFDDAC128M (scsi)
Disk /dev/sda: 128GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 525MB 524MB primary ext4 boot
2 525MB 128GB 128GB primary lvm
(parted)
파티션 테이블 정보가 msdos이면 MBR 방식의 파티션.
파티션 테이블 정보가 gpt 이면 gpt 방식의 파티션 인식.
디스크 포맷 확인
포맷 하기.(데이터 전부 삭제 됨)
3TB 인식 파티션 생성.
mklabel gpt
2TB 인식 파티션 생성.
mklabel msdos
수동 파티션 수행 EFI 시스템 파티션 처리
uefi 기본 설치 수행 후 사용자 정의 파티션을 사용할 경우 EFI 시스템 파티션 마운트 해야함.
/boot/efi EFI 시스템 파티션이 찾음.
이 위치를 마운트 해야함.
efi 파티션 생성, 파티션 크기 최소 200MB 적당 500MB로 설정 하고 마운트 한다.
오픈소스 부트로더...
coreboot: OpenSrc https://www.coreboot.org/downloads.html
CMOS : Complementary Metal-Oxide Semiconductor, 비휘발성 칩으로 BIOS 설정 값 저장
POST : Power-on self-test, CMOS에 설정된 하드웨어 점검.
UEFI : Unified Extensible Firmware Interface, 걍 대용량 하드디시크 3TB 인식 및 최신 부트로더 사용, 운영체제 선택
IBM 호환 컴퓨터 BIOS의 시대와 UEFI와 GPT 시대의 컴퓨터
BIOS, UEFI 펌웨어 유형.
BIOS 펌웨어:
- IBM PC(거의 대부분) 호환 컴퓨터.
- PC 펌웨어의 일반적 용어가 아니며 특정 유형의 펌웨어를 가르킴.
- BIOS 스팩이 따로 없으며, 사실성 표준(UEFI 존재하는 이유)
UEFI:
- 프로젝트 사이트: http://www.uefi.org
- 문서 다운로드 : http://www.uefi.org/sites/default/files/resources/2_4_Errata_A.pdf
- EFI 인텔에 의개 개발된후, fork 후 발전(회원사 HW:Intel,AMD SW:redhat, Mac, MS)
- IBM PC(거의 대부분) 호환 컴퓨터 지원.
- PC 펌웨어의 일반적 용어가 아니며 특정 유형의 펌웨어를 가르킴.
- UEFI BIOS 가지고 있지 않음.
- UEFI 2.2 보안 부팅 추가
- Secure Boot는 UEFI의 확장
BIOS 부팅
- 하드디스크 MBR(Master Boot Record) 영역
- BIOS 연동 코드 영역(MBR)
- 부팅 영역(부트 로더)
- BIOS 펌웨어가 하드디스크 MBR 영역 검색 해 부트로더 실행
- BIOS 펌웨어는 운영체제, 파티션 유형은 알 지 못하며 오로지 MBR영역의 부트로더를 실행한다.
- BIOS 펌웨어는 외부(통신 및 Netsork) 부팅 프로세스를 구성 할 수 있음.
UEFI 부팅 배경 지식
- BIOS 부팅 방식과 완전히 다름.
- UEFI, BIOS 펌웨어의 호환을 위해 CSM 구현.
- UEFI 펌웨어는 BIOS 펌웨어 부팅 방법 지원.(디스크 MBR 영역의 부트로더 실행)
- UEFI 펌웨어에서 BIOS 방식으로 부팅 UEFI 사용 중지 된 게 아님.
- 시스템의 설치된 UEFI 펌웨어를 비활성화 할 수 없음.
UEFI 기본 부팅: 실제 동작 방식
- BIOS 와 다르게 디스크 파티션, 부트 로더 및 운영체제 UEFI 펌웨어가 선택 할 수 있음.
- UEFI 펌웨어 방식은 문제 해결을 위해 다양한 비트 설정 방법을 통해 문제 해결을 하는데 도움을 줌.
- BIOS 펌웨어는 MBR 영역의 비트 설정만 할 수 있음.
- UEFI 펌웨어는 디스크 영역 앞에서 더 많은 일 처리를 할 수 있다는 의미가 됨.
BIOS MBR 방식 설정 문제
- 처리 불편. MBR 영역을 작성 하는데 응용 프로그램이 필요 함.
- MBR 영역에 최신 부트로더 사용시 충분한 크기를 제공하지 않음. MBR 512byte 크기를 같는다.
- 446Byte 부트코드, 64Byte 파티션 테이블, 2Byte 디스크 서명
- 부트코드: 부팅 가능한 파티션 검색 후 부트 섹터 호출
- 파티션 테이블: 16byte 4개의 파티션 영역. 3개 영역은 Primary Parttion(주파티션), 나머지 하나는 exten parttion(확장 파티션)
- 디스크 서명: 해당 하드디시크 식별하기 위한 2Byte 공유 ID 식별 정보.
- 최신 부트로더는 MBR 영역의 크기에 맞게 부트로더를 설치 하므로, 전체 기능을 사용하지 못한다.
- mbr 영역을 벗어난 부트로더 기능은 mbr(512Byte) 영역을 벗어난 하드디스크 첫번째 파티션 영역에 설치.
- 이러한 문제가 시스템 디자인 큰 문제 발생하 지만 신경 쓸 필요는 없다.
- 첫번째 파티션에 충분한 공간을 확인하기 어렵고, 만약 충분한 공간이 없다면 시스템 부팅시 문제 발생
- 하드디스크 부팅 디자인은 표준화된 방법은 제공하지 않음
- 다수의 운영체제를 선택해 부팅 하려면 BIOS/MBR 방식에서는 부트로더가 유일한 해결방법.
- UEFI 부팅의 경우 원격 서버에 부팅하는 표준 방법을 제공 함.
요약
초창기 제안 인텔.
GUID Partition Table, MBR은 최대 2.2TB 디스크 파티션을 영역 설정, GPT 최대 9.4ZB 디스크 파티션 영역 설정. GPT는 부트레코드 영역이 아니라 데이터 영역으로 사용해야 함.
GPT MBR 사용방안.
기존 Legacy 방식에서 새롭게 추가된 EFI 방식이 필요한 이유는 3TB HDD가 보급되기 시작, 기존 Legacy 방식으로는 GPT 3TB 이상의 HDD 포맷을 인식 할 수 없음. 메인보드의 바이오스 설정에도 GPT 파티션으로 된 HDD 운영체제를 설치하기 위해 UEFI가 추가. MBR과 GPT의 속도 차이는 GPT에서 조금 더 빠름.
UEFI가 아닌 Legacy 방식의 하드디스크는 MBR 방식으로 포맷되어 설치 됨(Linux의 경우 MSDOS 인식)
UEFI BIOS 방식의 하드디스크는 GPT 방식으로 포맷되어 설치 됨(Linux의 경우 GPT로 인식)
UEFI 펌웨어 방식은 개별 디스크 하나 당 부트 로더 코드를 상주 함.
부팅 로드를 처리 하기 위한 더 많은 인프라가 추가된 펌웨어 임.
인프라 추가 내용(EFI 실행파일, GPT, EFI 시스템 파티션)
EFI 실행파일
UEFI 펌웨어가 EFI 형식의 코드를 실행 할 수 있도록 작성 되어야 함.
GPT (GUID 파티션 테이블) 형식
GPT 파티션 테이블을 만들기 위한 표준으로 디스크 파티션 정보로 디스크 시작 부분에 정의됨.
MBR/MS-DOS 파티션 테이블 표준 보다 더 나은 표준을 제공(3TB) 이상 인식.
UEFI 펌웨어는 GPT 파티션(MBR)을 인식 할 수 있어야 함.
EFI 시스템 파티션
펌웨어는 특정 유형의 파일 시스템을 읽을 수 있음.
UEFI 펌웨어는 본질 적으로 FAT, FAT12, FAT16, FAT32 파일 지원.
파티션 테이블을 읽을 수 있다.
특정 파일 시스템의 파일에 접근 할 수 있다.
특정 현식으로 코드를 실행 할 수 있다.
UEFI 부팅 관리자
sudo apt-get install efibootmgr
efibootmgr은 UEFI 구성을 설정 제어하느데 사용되는 프로그램이다.
UEFI 부팅 관리자는 구조적으로 정의된 NVRAM 변수를 수정하여 구성 할 수 있는 펌웨어 정책이다.
부트 관리자는 UEFI 드라이버와 UEFI 응용 프로그램(UEFI OS 부트 로더 포함)을 NVRAM 전역 변수로 정의 된 순서대로 로드하려고 시도 한다.
BIOS 펌웨어는 부트 메뉴에서 시스템에 연결된 하드디스키가 필연적으로 연결 된다.
UEFI 펌웨어에서는 이러한 방식은 해당 사항이 없다.
UEFI 부팅 관리자 구성은 "부팅 메뉴"에서 항목을 추가 제거 할 수 있음
운영체제가 부팅된 후 시스템 부팅 설정을 구성 할 수 있다.
modprobe efivars
efibootmgr -v
BootCurrent: 0000 ---> 부트 메뉴 항목
Timeout: 2 seconds ---> 대기 시간
BootOrder: 0000,0004,0002,0003 ---> 부트 시퀀서
Boot0000* ubuntu HD(1,800,f3800,053af52d-919d-4762-9def-19de4664b680)File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0002* Hard Drive BIOS(2,0,00)..GO..NO........o.e.s....................A...........................>..Gd-.;.A..MQ..L.E.D.9.D.7.0.A.8.7.1.C.E.5.0.5.8.7.3.7.0........BO
Boot0003* UEFI: Built-in EFI Shell Vendor(5023b95c-db26-429b-a648-bd47664c8012,)..BO
Boot0004* ubuntu HD(1,800,f3800,053af52d-919d-4762-9def-19de4664b680)File(\EFI\UBUNTU\GRUBX64.EFI)
UEFI 기본 부팅: 실제 동작 방식 - 부팅 관리자 항목
- EFI_DEVICE_PATH_PROTOCOL 섹션(부팅 이외의 다른 용도로 사용되는 일반적 프로토콜)
-- 비디오 카드 부팅 시도 하지 않음
-- PXE 서버 설정
-- 노 디스크 설정
부팅 프로세스 구성(운영체제)
efibootmgr 명령어를 사용해 구성 할 수 있음.
자세한 내용은 맨 페이지 참고.
이 모드를 사용하려면 BIOS 변경 필요(EFI, UEFI 활성화)
펌웨어의 UI 화면 갱신이 안될 수 도 있음.
UEFI 기본 및 BIOS 호환 부팅
EFI 시스템 파티션에 쓰고, UEFI 항목을 추가
BIOS 호환성 모드로 부팅하면 운영 체제는 BIOS 호환 설치로 운영체제 설치(MBR 유형의 부트로 사용)
부팅 모드 찾기
efibootmgr -v
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
dmesg 확인 및 커널 로그 확인해 어떠한 부팅 모드인지 확인 가능
UEFI 기본 부팅 사용
라이브 CD 제작 후 usb 스틱에 기록 할 때 -efi 매개 변수 사용해 UEFI 부팅 가능
디스크 형식 ( MBR VS GPT)
sudo parted /dev/sda
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: ATA C300-CTFDDAC128M (scsi)
Disk /dev/sda: 128GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 525MB 524MB primary ext4 boot
2 525MB 128GB 128GB primary lvm
(parted)
파티션 테이블 정보가 msdos이면 MBR 방식의 파티션.
파티션 테이블 정보가 gpt 이면 gpt 방식의 파티션 인식.
디스크 포맷 확인
포맷 하기.(데이터 전부 삭제 됨)
3TB 인식 파티션 생성.
mklabel gpt
2TB 인식 파티션 생성.
mklabel msdos
수동 파티션 수행 EFI 시스템 파티션 처리
uefi 기본 설치 수행 후 사용자 정의 파티션을 사용할 경우 EFI 시스템 파티션 마운트 해야함.
/boot/efi EFI 시스템 파티션이 찾음.
이 위치를 마운트 해야함.
efi 파티션 생성, 파티션 크기 최소 200MB 적당 500MB로 설정 하고 마운트 한다.
오픈소스 부트로더...
coreboot: OpenSrc https://www.coreboot.org/downloads.html
2019/01/19
ubuntu 18.04 GUI 방식 설치 제작 및 서버 기반에서 설치 메모리 스틱 만들기
18.04 윈도우 키: startup di 또는 시동 디스크 만들기로 검색
source disc image(iso): iso 파일 추가
Disk to use:
usb 드라이버 지정
Make Startup Disk 선택
서버 CLI 방식.
데비안 패키지 설치
aptitude install gddrescue
apt-get install gddrescue
센투 패키지 설치
yum install ddrescue
usb 메모리 스틱 검색
fdisk -l
설치 cd 및 메모리 스틱 생성
ddrescue bionic-desktop-amd64.iso /dev/sdX --force -D
source disc image(iso): iso 파일 추가
Disk to use:
usb 드라이버 지정
Make Startup Disk 선택
서버 CLI 방식.
데비안 패키지 설치
aptitude install gddrescue
apt-get install gddrescue
센투 패키지 설치
yum install ddrescue
usb 메모리 스틱 검색
fdisk -l
설치 cd 및 메모리 스틱 생성
ddrescue bionic-desktop-amd64.iso /dev/sdX --force -D
피드 구독하기:
글 (Atom)