Category Archives: 허접프로그래머

맥에서 부팅가능한 USB 굽기 (ISO to USB)

리눅스를 설치하려고 보니 시디굽기는 왠지 아깝고 Bootable USB를 만들어 설치하면 좋을것 같다는 생각이 들었습니다. 다음은 ISO파일을 이용한 부팅가능한 USB 만드는 방법입니다.

작업에 사용한 ISO파일은 CentOS 6.5 Minimal 버전입니다. 적절한 위치에 다운로드 한 뒤 다음의 명령을 사용하여 IMG파일로 변환합니다.

$ hdiutil convert -format UDRW -o CentOS-6.5-x86_64-minimal.img CentOS-6.5-x86_64-minimal.iso
CentOS_6.5_Final                (Apple_ISO : 0) 읽는 중...
..................................................................................................
(Apple_Free : 1) 읽는 중...
경과 시간:  3.186s
속도: 124.9M바이트/초
저장: 0.0%
created: CentOS-6.5-x86_64-minimal.img.dmg

이번엔 USB를 맥에 연결하고 어떤 파티션에 마운트 되어있는지 다음과 같은 방법으로 확인합니다.

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            250.1 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *15.8 GB    disk1
   1:                        EFI EFI                     209.7 MB   disk1s1
   2:                  Apple_HFS OS X 10.9 Install Di... 15.5 GB    disk1s2
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            CentOS_6.5_Final       *417.3 MB   disk2

16기가짜리 USB를 꼽았는데요. 잘 보면 /dev/disk1에 마운트 된것이라는것을 확인할 수 있습니다.

USB로 굽기에 앞서 USB에 이미 무언가 설치가 되어있는 상태라면 굽기가 되지 않는 경우가 있습니다. 다음과 같이 파티션탭에서 1개의 파티션을 선택하고 여유공간으로 바꿔줍시다. 이제 빈 USB가 됩니다.

making_bootable_usb

이제 이미지를 USB로 구울것인데요. 기존에 확인했던 USB 마운트 포인트가 /dev/disk1이었던것을 기억하고 다음과 같은 명령을 사용하여 굽기를 합니다.

$ sudo dd if=./CentOS-6.5-x86_64-minimal.img.dmg of=/dev/rdisk1 bs=1m
load: 1.71  cmd: dd 15962 uninterruptible 0.00u 0.14s
398+0 records in
398+0 records out
417333248 bytes transferred in 18.689190 secs (22330194 bytes/sec)

if에는 IMG로 변환했던 이미지를 넣어주고 of에는 disk가 아닌 rdisk로 입력해 줍니다. 즉 아까 확인했던 파티션의 위치가 /dev/disk1 이었다면 /dev/rdisk1으로 해주시면 됩니다. 오래 걸릴 경우 중간에 CTRL + T를 눌러 현재 진행 상황을 확인할 수 있습니다.

샤딩과 파티셔닝의 차이점

이글은 Quora에 올라온 “What’s the difference between sharding and partition?“글의 질문과 모자이크 CTO가 답변한 내용을 번역한 글입니다.

샤딩(sharding)과 파티셔닝(partitioning)의 차이가 무엇인가?

분산 데이터베이스 시스템에서 샤딩과 파티셔닝이라는 단어를 종종 듣는다. 하지만 그들의 차이점을 잘 모르겠다. 그래서 이것들을 위키에서 검색해보았지만 여전히 혼란스럽다. 약간의 예제를 줄 수 있을까?

Tony Bako, Mosaic의 CTO의 답변

파티셔닝이란 퍼포먼스(performance), 가용성(availability) 또는 정비용이성(maintainability)를 목적으로 당신의 논리적인 데이터 엘리먼트들을 다수의 엔티티(table)로 쪼개는 행위를 뜻하는 일반적인 용어이다.

샤딩수평 파티셔닝(horizontal partitioning)과 동일하다. 데이터베이스를 샤딩하게 되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 각각의 샤드에 어떤 데이터가 저장될지를 샤드키를 기준으로 분리한다. 예를 들면, 나는 고객의 데이터베이스를 CustomerId를 샤드키로 사용하여 샤딩하기로 하였다. 0 ~ 10000 번 고객의 정보는 하나의 샤드에 저장하고 10001 ~ 20000 번 고객의 정보는 다른 샤드에 저장하기로 하였다. DBA는 데이터 엑세스 패턴과 저장 공간 이슈(로드의 적절한 분산 , 데이터의 균등한 저장)를 고려하여 적절한 샤드키를 결정하게 된다.

Horizontal Partitioning

Horizontal Partitioning

수직 파티셔닝(vertical partitioning)은 하나의 엔티티에 저장된 데이터들을 다수의 엔티티들로 분리하는것을 말한다. (마찬가지로 공간이나 퍼포먼스의 이유로) 예를 들면, 한 고객은 하나의 청구 주소를 가지고 있을 수 있다. 그러나 나는 데이터의 유연성을 위해 다른 데이터베이스로 정보를 이동하거나 보안의 이슈등을 이유로 CustomerId를 참조하도록 하고 청구 주소 정보를 다른 테이블로 분리할 수 있다.

Vertical Partitioning

Vertical Partitioning

요약하면 파티셔닝은 퍼포먼스, 가용성, 정비용이성등의 목적을 위해 논리적인 엔티티들을 다른 물리적인 엔티티들로 나누는것을 의미하는 일반적인 용어이다. 수평 파티셔닝 또는 샤딩은 스키마 복제 후 샤드키를 기준으로 데이터를 나누는것을 말한다. 수직 파티셔닝은 스키마를 나누고 데이터가 따라 옮겨가는것을 말한다.