[Raspberry Pi] 3. 라즈베리파이3 나스만들기 - 외장하드 마운트하기
외장하드 준비하기
하드 디스크 확인하기
lsblk 를 통하여
$ sudo lsblk |
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 3.9G 0 disk ├─sda1 8:1 0 487M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 3.4G 0 part ├─fepserver--vg-root 252:0 0 3.9G 0 lvm / └─fepserver--vg-swap_1 252:1 0 1G 0 lvm [SWAP] sdb 8:16 0 3G 0 disk └─fepserver--vg-root 252:0 0 3.9G 0 lvm / sr0 11:0 1 1024M 0 rom |
현재 디스크들의 상태를 간단히 확인할 수 있다.
fdisk 를 통하여
$ sudo fdisk -l |
Disk /dev/sda: 3.9 GiB, 4185055232 bytes, 8173936 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 Disklabel type: dos Disk identifier: 0x8a4d1bc8
Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 999423 997376 487M 83 Linux /dev/sda2 1001470 8173567 7172098 3.4G 5 Extended /dev/sda5 1001472 8173567 7172096 3.4G 8e Linux LVM
Disk /dev/sdb: 3 GiB, 3221225472 bytes, 6291456 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 |
디스크들의 정보를 확인할 수 있다.
포맷하기
외장하드를 포맷하는 방법이다.
외장하드의 파일시스템을 만드는 방법으로 이미 사용중인 외장하드가 있다면 포맷시 모든 파일을 지워버린다.
이미 사용중인 외장하드가 있고 파일을 없애지 말아야 한다면 포맷하지 말아야한다.
명령은 :
$ sudo mkfs -t {type} {device} |
{type} : 파일시스템 종류
{device} : 기기 경로
예를 들어 /dev/sdb 장치를 ntfs로 포맷시:
$ sudo mkfs -t ntfs /dev/sdb |
하드디스크는 ntfs 혹은 fat 파일시스템으로 포맷하기를 추천한다. 그래야 해당 하드디스크를 윈도우 환경에 연결했을 때도 잘 동작하기 때문이다.
Mount 하기
방법1, UUID 마운트(추천, 재부팅시 자동 mount 유지)
UUID로 마운트 하기 위해서는 우선 장치의 UUID를 확인해야한다.
장치가 연결된 포트 위치에 따라 /dev/sdb, /dev/sdc 등 바뀔수 있다. 하지만 UUID는 연결 포트가 달라진다해도 하드디스크의 고유의 번호이기 때문에 달라지지 않는다.
blkid 명령을 이용하여 UUID 정보를 얻는다.
$ sudo blkid dev/hda1: UUID="e38c77a6-0990-44bf-a592-9c156920fb5d" SEC_TYPE="ext2" TYPE="ext3" /dev/hda3: UUID="9fa0f339-1fa5-4c75-942a-b6001b7bcde8" SEC_TYPE="ext2" TYPE="ext3" /dev/hda4: UUID="26474b1a-8353-4a15-8add-94df2a6784b7" SEC_TYPE="ext2" TYPE="ext3" /dev/hda5: UUID="9dfa1ff8-b91c-47db-9d8d-8cfb78ff7432" SEC_TYPE="ext2" TYPE="ext3" /dev/hda6: TYPE="swap" UUID="0e7bd3d5-88dd-4a06-81bd-2dd1f2870a5c" /dev/sda1: UUID="00CC65DDCC65CE0A" LABEL="Data1" TYPE="ntfs" /dev/sda2: UUID="8d6f7e4f-4bfe-4ad1-83b8-22d71065193f" SEC_TYPE="ext2" TYPE="ext3" /dev/sda3: UUID="2E38726838722EC9" LABEL="Data2" TYPE="ntfs" /dev/sdb2: UUID="1ed998db-712f-4fc3-9155-02e091fd8380" TYPE="ext3" /dev/sdb3: UUID="4c907521-a4fb-4a2c-86ce-9b8206aaf33a" TYPE="ext3" /dev/sdb1: UUID="feeb3d31-7c74-41e3-87fd-9a60c900430f" SEC_TYPE="ext2" TYPE="ext3" |
UUID를 확인하고 마운트 하면 된다.
예를 들어
UUID : "e38c77a6-0990-44bf-a592-9c156920fb5d"
파일시스템 : ntfs
"nas" 란 계정의 uid, gid : 500
umask : 027 (owner rwx, group r-x, other ---)
$ sudo vi /etc/fstab |
$ sudo mount -a |
여기서 umask 는 권한을 뺏는 거라 생각하면 된다.
r은 4, w은 2, x는 1 이다. 2진값이다. rwx = 421 즉 7이다. rw = 420 즉 6이다.
umask 027 은 소유자에게는 rwx , 그룹에게는 r-x, 그밖에 계정에게는 아무권한을 안주겠다는 것이다. 해당 옵션은 ntfs,fat 와 같은 파일의 권한 개념이 없는 파일시스템에서만 사용되는 옵션이다.
해당 옵션을 준 이유는 nas 란 사용자는 rwx 모든 권한을 가지고 nas 란 그룹은 r-x 즉 읽기 권한만 가지고 다른 사용자는 어떤 권한도 주지 않기 위해서다.
다른 이들과 mount한 파일 시스템을 공유하기 위해 계정을 만들어주고 nas 그룹에 넣으면 해당 mount한 파일시스템에 읽기 권한만 가지고 읽을 수 있기 때문에 파일을 수정하거나 삭제할 수 없어 파일을 보호할 수 있다.
혹은 권한을 775 로 주고 nas 사용자와 그룹은 rwx 권한을 다 주고 other는 r 즉 읽기 권한만 줄 수도 있다.
방법2, mount 명령을 사용하여 일시적으로 마운트하기(비추, 재부팅시 unmount됨)
mount가 유지되지 않는다.
명령 형식
mount -t {파일시스템} {장치파일} {마운트 포인트} |
unmount {장치파일 혹은 마운트 포인트} |
{파일시스템} 은 생략해도 된다.
예)
CD-Rom 마운트
$ sudo mount -t iso9660 /dev/cdrom /media/cdrom |
NFS 마운트
$ sudo mount -t nfs 123.12.12.1:/nfs /media/nfs |
방법3, /etc/fstab 파일로 마운트하기(재부팅시 자동 mount 유지)
/etc/fstab 에 마운트 내용을 열거하면된다.
/etc/fstab 파일에 설정한 장치가 없거나, 틀릴 경우 부팅 자체가 안될 수 있으므로 주의하자. 이때는 시스템 응급복구 모드를 사용하여 복구해야 한다.
형식
<file system> <mount point> <type> <options> <dump> <pass> |
예)
$ sudo vi /etc/fstab |
/dev/sda1 /media ext4 defaults 0 0 |
/dev/sda1 을 마운트는 장치파일 경로로 지정한 것이다. 장치를 추가하거나 제거할 때 장치파일 경로가 바뀔수 있다.
UUID로 마운트 한 것은 장치의 고유이름을 사용한 것으로 만약 장치파일의 경로가 바뀐다 하거라도 동일한 경로에 마운트 되는 것을 보장한다.
/etc/fstab 에 새로운 마운트 포인트 추가하고 즉시 마운트한다.
$ sudo mount -a |
Mount Option
옵션 | 설명 |
defaults | rw, suid, dev, exec, auto, nouser, async 옵션을 모두 가지는 기본 설정 |
auto | 바팅시 자동 마운트 |
noauto | 부팅시 자동 마운트 안함 |
dev | 파일시스템 상의 문자, 블럭 특수 장치를 해석 |
nodev | 파일시스템 상의 문자, 블럭 특수 장치를 해석하지 않음 |
exec | 바이너리 실행파일이 실행되는 것을 허용 |
noexec | 바이너리 실행파일이 실행되는 것을 허용 안함 |
suid | setuid, setgid의 사용을 허용 |
nosuid | setuid, setgid의 사용을 거부 |
ro | 읽기 전용 (read-only) |
rw | 읽기/쓰기 가능(read/write) |
async | 파일시스템에 대한 I/O가 비동기적으로 이루어짐 |
sync | 파일시스템에 대한 I/O가 동기적으로 이루어짐 |
user | 일반 계정 사용자들도 마운트 할 수 있게 허용 |
nouser | 일반 계정 사용자가 마운트할 수 없음 ( root 만 mount 가능) |
noatime | 파일 접근 시간을 업데이트하지 않음(메일 스풀이나 로그와 같이 I/O 가 많은 파일 시스템에서 성능 향상) |
remount | 이미 마운트된 파일시스템을 다시 마운트 |
uid | mount 시 해당 마운트의 소유자(user id) 설정(uid 개념이 없는 파일 시스템 마운트에서만 사용) |
gid | mount 시 해당 마운트의 소유 그룹(group id) 설정(gid 개념이 없는 파일 시스템 마운트에서만 사용) |
_netdev | 네트워크 드라이브 마운트시 네트워크 활성화 때 마운트 하라는 설정 |
/etc/fstab 사용시 네트워크 드라이브/저장소(nfs, iscsi..) 사용시 대기 문제 해결법(_netdev)
/etc/fstab 에 네트워크 드라이브/저장소를 자동 mount 하게 설정하는 경우 시스템 재시작시 마운트를 하지 못하여 대기를 하는 경우가 있다.
이 문제는 시스템이 네트워크를 설정하고 연결하기 전에 /etc/fstab 의 mount 를 시도하기 때문이다.
예를 들어
/etc/fstab
192.168.1.1:/usr/local /mnt nfs defaults 0 0 |
위와 같은 경우 192.168.1.1:/usr/local 에 대한 mount 가 네트워크 연결보다 먼저 일어나기 때문에 시스템 시작시 자동 마운트 되지 않는다. 심한 경우는 해당 경로를 마운트하기 위해 무한대기한다.
이와 같이 네트워크를 통한 저장소를 /etc/fstab 에 등록할때에는 mount 옵션에 _netdev 를 추가해주어야한다.
192.168.1.1:/usr/local /mnt nfs defaults,_netdev 0 0 |
_netdev 옵션은 네트워크에 연결후 마운트하라는 옵션이다. 이렇게 해야 시스템 시작시 문제 없이 해당 네트워크 경로로 자동 마운트 된다.