[Linux] 부팅 USB/SD카드 만들기

3 minute read

OS를 부팅하기 위해 부팅 USB/SD카드 장치를 만드는 과정을 포스팅합니다.

사용환경은 우분투 PC이며, 어플리케이션은 Etcher를 사용하는 방법, 리눅스 명령어는 fdiskdd 를 사용할 것입니다.

Etcher로 만들기

설치할 OS(xxx.iso/xxx.img) 를 준비합니다.
Ethcer 다운로드 합니다.

etcher
Flash with Etcher


쉽고 간단한 방법입니다.

리눅스 명령어로 만들기

설치할 OS(xxx.iso/xxx.img) 를 준비합니다.

저장장치(USB나 SD카드 등)를 PC에 연결합니다.
저는 샌디스크 micro SD card 8GB 연결했습니다.

저장장치를 조회하는 명령어는 sudo fdisk -l 입니다.

$ sudo fdisk -l
...
Disk /dev/loop17: 428 KiB, 438272 bytes, 856 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop18: 452 KiB, 462848 bytes, 904 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdd: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Disk model: SD  Transcend
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


제 PC에서 /dev/sdd 이라는 이름으로 장치가 붙었습니다.
FAT32 타입으로 파티션이 하나 존재합니다.

장치가 마운트 되어있다면 해제합니다.

$ sudo umount /dev/sdd


dd 명령어로 저장장치를 포맷합니다.

$ sudo dd if=/dev/zero of=/dev/sdd bs=4096
dd: error writing '/dev/sdd': No space left on device
1944769+0 records in
1944768+0 records out
15515647 bytes (8 GB, 7.2 GiB) copied, 421.725 s, 37.8 MB/s


os 이미지를 dd 명령어로 복사합니다.

$ sudo dd if=./xxx.iso of=/dev/sdd bs=1M status=progress


if 는 input 파일, of 는 output이 저장될 파일,
bs 는 dd 명령으로 한번에 읽고 쓸 데이터의 양 입니다.
status=progress 는 아마 유추가 가능할텐데, 말 그대로 명령의 로그를 보여주는 옵션입니다.

fdisk 추가 설명

추가적으로 덧붙임 입니다.

파티션 테이블은 DOSGPT 으로 만들어 주면 됩니다.
DOSMBR 과 같습니다.

fdisk를 사용합니다.
이번 포스팅에서 다루지 않는 fdisk 의 명령들은 m을 입력해서 확인하면 됩니다.

o 을 입력해서 DOS 파티션 테이블을 만듭니다.

$ sudo fdisk /dev/sdd
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): o
Created a new DOS disklabel with disk identifier 0x8adfa398.


n 을 입력해서 새로운 파티션을 만듭니다.
부트파티션, 루트 파일시스템 파티션 총 2개의 파티션을 만들 예정입니다.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p


extend 파티션을 만들것이 아니기 때문에 p를 선택합니다.
부트파티션의 사이즈는 256M로 임의로 만들어 보겠습니다.

Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-15523839, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-15523839, default 15523839): +256M

Created a new partition 1 of type 'Linux' and of size 256 MiB.

Command (m for help):


두 번째 파티션도 같은 방식으로 만들어 보겠습니다.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (526336-15523839, default 526336):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (526336-15523839, default 15523839):

Created a new partition 2 of type 'Linux' and of size 7.2 GiB.

Command (m for help):

이렇게 하면 2개의 파티션을 가진 USB초기화가 완료되었습니다.

dd 추가 설명

추가적으로 덧붙임2 입니다.

dd 명령어 간단하게 설명하겠습니다.
단순하게 파일 내용을 복사 & 붙여녛기 한다고 생각하면 됩니다.

block1 , block2 2개의 파일을 예로 들면,

block1: 00 11 22 33 44 55
block2: AA BB CC DD EE FF GG


다음은 dd 명령 예시입니다.

$ sudo dd if=block1 of=block2 bs=1
block1:   00 11 22 33 44 55
block2: [ 00 11 22 33 44 55 ] GG


if 는 복사할 파일을, of 는 대상 파일을 파라미터로 받습니다.
bs 는 복사할 단위(여기서는 1바이트) 입니다.
if , of 모두 블록 장치/파일들이 올 수 있습니다.

추가로, skip , seek 예시입니다.

case 1

$ sudo dd if=block1 of=block2 bs=1 skip=2
block1:   00 11 22 33 44 55
block2: [ 22 33 44 55 ] EE FF GG


case 2

$ sudo dd if=block1 of=block2 bs=1 seek=2
block1: 00 11 22 33 44 55
block2: AA BB [ 00 11 22 33 44 55 ]


case 3

$ sudo dd if=block1 of=block2 bs=1 skip=2 seek2
block1: 00 11 22 33 44 55
block2: AA BB [ 22 33 44 55 ] GG


이처럼, skip 은 input 파일에서 시작지점부터 얼마만큼의 블럭을 스킵할지 , seek 은 output 파일에서 시작지점부터 얼마만큼의 블럭을 스킵할지 결정합니다.

만약 장치 간 블록 사이즈가 다르다면..?
/dev/sda 장치의 내용을 /dev/sde 장치에 쓴다고 가정해 봅시다.

$ sudo dd if=/dev/sda of=/dev/sde ibs=2M obs=3M conv=sync

conv=sync 옵션을 사용하면 됩니다.

이 외에도 여러 옵션이 있지만, 추후 다른 포스팅이나 dd –help 명령, 혹은 구글링 등으로 자세히 확인할 수 있습니다.

Leave a comment