목표. sda에 존재 하는 파티션 정보를 똑같이 sdb로 복사 하고 싶다.
궁극적인 목표 : 추가된 노드에 우리가 정해 놓은 파티션 그대로 카피해서 손쉽게 원본에 있는 OS나 설치되어있는 패키지를 설정하기 위함
1. 방법 dd명령어를 사용하기
dd 명령어는 데이터를 블록 단위로 복사하는 명령어로서, "디스크 복사"라고도 불립니다. 주로 리눅스 및 다른 유닉스 기반 시스템에서 사용되며, 파일이나 디스크의 내용을 복사하거나 변환하는 데에 활용됩니다. 아래는 dd 명령어의 기본 구문과 주요 옵션들에 대한 간단한 설명입니다.
💢 데이터를 똑같이 a -> b복사 하기때문에 시간이 오래 걸리고 중간에 문제가 있을시 정상 작동을 하지 않을수도 있음
dd if=input_file of=output_file bs=block_size
- if: 입력 파일 (복사할 소스 파일)
- of: 출력 파일 (대상 파일)
- bs: 블록 크기 (한 번에 읽거나 쓰는 데이터의 크기)
예를 들어, /dev/sda의 내용을 /dev/sdb로 1MB 블록 크기로 복사하려면 다음과 같이 사용할 수 있습니다.
sudo dd if=/dev/sda of=/dev/sdb bs=1M
주요 옵션과 설명:
- if: 입력 파일을 지정합니다. 예를 들면, 디스크 장치 파일 (/dev/sda)이나 일반 파일의 경로를 사용할 수 있습니다.
- of: 출력 파일을 지정합니다. 디스크 장치 파일이나 일반 파일의 경로를 사용할 수 있습니다.
- bs: 블록 크기를 지정합니다. 블록 단위로 데이터를 처리하며, 기본값은 512바이트입니다. bs 옵션을 사용하여 블록 크기를 조절할 수 있습니다. 큰 블록 크기를 선택하면 더 빠른 전송 속도를 얻을 수 있지만, 메모리 사용량이 늘어날 수 있습니다.
- count: 몇 번 반복할지를 지정합니다. 예를 들어, count=10은 10번의 블록을 복사하라는 의미입니다.
dd 명령어는 강력하지만 주의가 필요합니다. 잘못 사용하면 데이터를 손상시킬 수 있습니다. 신중하게 사용하고, 정확한 장치 및 경로를 확인한 후에 실행하는 것이 중요합니다.
진행후 결론
- dd를 이용해서 하는 방법은 우리에게 맞지 않는 방법이다.
- 용량이 1~2GB면 상관없지만 TB단위로 올라갔을때는 그 시간을 기다릴수 없음
- 많은 데이터를 옮기다 보면 중간에 잘못될 가능성도 배제할 수 없음
2. cp 명령어 사용하기
# cp [옵션] [원본 파일] [복사 위치]
자주 사용하는 옵션
옵션 | 내용 |
-a | 원본 파일의 속성, 링크 정보도 함께 복사하는 옵션입니다.( -r옵션이 내재되어 있다.) |
-b | 복사될 파일의 이름이 이미 존재한다면 백업 파일을 생성한다 |
-p | 원본 파일의 소유자, 그룹, 권한, 시간정보를 그대로 복사하는 옵션 입니다. |
-f | 복사위치에 파일이 존재하는 경우 덮어쓰는 옵션 입니다. |
-i | 복사될 파일의 이름이 이미 존재한다면 사용자에게 덮어쓰기 여부를 묻는다 |
-r | 원본파일의 하위 파일까지 복사하는 옵션 입니다.(재귀적으로 처리하도록 하는 옵션) |
-u | 원본 파일이 복사본 파일보다 최신이거나 파일 및 디렉토리가 없을 경우 복사하는 옵션 입니다. |
-v | 현재 작업을 표시하는 옵션 입니다. |
-b | 파일이 이미 있는경우 백업파일을 생성하는 옵션입니다. |
-S [name] | -b 옵션을 통해 백업 옵션을 사용할 경우 '~' 대신 입력된 내용을 지정하는 옵션입니다. |
✨ 명령어 앞에 \(역슬러시)를 해주면 alias를 무시하고 진행 합니다.
✨ 재귀적
- 함수 또는 프로세스가 자기 자신을 호출하는 특성
- 디렉토리 복사에서 "재귀적"은 하위 디렉토리와 그 내용물까지 포함하여 전체 디렉토리 구조를 복사한다는 개념
- 재귀적으로 디렉토리를 처리하면 해당 디렉토리 내에 다른 디렉토리가 존재하더라도 그 하위 디렉토리도 모두 복사됩니다.
내가 사용할 옵션은
-auf
=> 원본 파일의 속성, 링크정보도 함께 복사 하면서 복사본 파일보다 최신이거나 파일 및 디렉토리가 없을 경우 복사
복사위치에 파일이 존재하는 경우 덮어쓰는 옵션
cp -auf [원본] [복사할곳]
2-1. 파일 시스템 포멧
mkfs 명령어를 이용하여 포멧하기
# mkfs -t [파일 시스템] [장치이름]
# mkfs.[파일시스템] [장치이름]
파일시스템을 xfs로 하고 싶을땐 -f옵션을 추가 해주어야합니다.
mkfs에서 지원하는 파일시스템의 종류
- ext2, ext3, ext4: Linux에서 흔히 사용되는 확장 파일 시스템으로, 각각 세대별로 업그레이드되어왔습니다.
- ext2: 파일과 디렉토리에 대한 간단한 기능을 제공합니다.
- ext3: ext2를 확장하여 저널링(journaling) 기능을 추가한 파일 시스템입니다.
- ext4: ext3를 확장하고 개선한 파일 시스템으로, 대용량 파일 및 디렉토리 지원, 성능 향상 등이 있습니다.
- XFS: SGI에서 개발한 고성능 파일 시스템으로, 대용량 파일과 디렉토리를 처리하는 데 특히 효과적입니다.
- Btrfs: 복사본(Copy-on-Write) 및 스냅샷과 같은 고급 기능을 제공하는 파일 시스템으로, 파일 시스템 검사와 수리 기능도 갖추고 있습니다.
- FAT: Windows와의 호환성을 위해 사용되는 파일 시스템으로, 주로 USB 플래시 드라이브와 같은 이동식 저장 장치에 사용됩니다.
- NTFS: Windows NT 계열 운영 체제에서 사용되는 파일 시스템으로, Linux에서도 읽기 전용 또는 일부 쓰기 지원을 통해 사용할 수 있습니다.
- exFAT: FAT 파일 시스템을 확장하여 대용량 파일 지원과 플래시 드라이브와 같은 이동식 저장 장치에 적합한 파일 시스템입니다.
mkfs -t xfs -f 명령어
[root@localhost /]# mkfs -t xfs -f /dev/sdb2
meta-data=/dev/sdb2 isize=512 agcount=4, agsize=1831040 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=7324160, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=3576, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost /]#
mkfs.xfs -f 명령어
[root@localhost /]# mkfs.xfs -f /dev/sdb3
meta-data=/dev/sdb3 isize=512 agcount=4, agsize=1220672 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=4882688, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost /]#
이렇게하면 포멧까지 완료 됩니다.
💢 parted에서 파티션을 나눌때 선택하는 파일시스템은 "우리가 앞으로 사용할 파일시스템을 선택, 준비만 해줄뿐"
mkfs를 이용하여 다시 한번더 포멧 작업을 해주어야 합니다.
2-2. 마운트하기
일반적으로 우리가 알고 있는 방식대로
1. mkdir을 이용 폴더 생성
2. mount 명령어를 이용 장치와 디렉토리 마운트 하기
3. 마운트가 잘 되었는지 확인하기
1. mkdir을 이용 폴더 생성
mkdir /sdb/usr
여러 폴더 한번에 만들기
2. mount 명령어를 이용 장치와 디렉토리 마운트 하기
mount -t xfs /dev/sdb2 /sdb/usr
3. 마운트가 잘 되었는지 확인하기
df -Th
4. 한번에 마운트
mount /dev/sdb1 /sdb
mount /dev/sdb2 /sdb/usr
mount /dev/sdb3 /sdb/var
mount /dev/sdb6 /sdb/scr
3. pipe와 grep, xargs를 이용한 파일 복사 하기(cp)
3-1. ls 명령어를 이용
ls -d /* | grep -v -E '(proc|sys|dev|run|tmp|sdb|usr|var|scr)$' | xargs -i cp -auf {} /sdb
=> ls를 이용하여 -d옵션으로 / 이하에 있는 모든 디렉토리를 찾아내서 grep을 이용하여 제외할 폴도명을 적어줍니다.
- 여기서 나는 다른 컴퓨터에서 사용할것이기 때문에 가상 파일 시스템인 /proc, /sys, /dev, /run, /tmp 디렉토리들이 필요하지않다.
- sdb는 sdb1을 마운트시킬 디렉토리라 필요하지 않음
- usr, var,scr은 각각 /sdb하위에 디렉토리를 만들고 sdb2,sdb3,sdb6에 마운트 할것이기 때문에 필요하지 않음
💢가상 파일 시스템이란- 일반적으로 가상 파일 시스템 디렉터리들은 시스템이 부팅될 때 생성되며, 시스템이 종료될 때 제거됩니다. 가상 파일 시스템은 시스템 상태와 동적 정보를 제공하는 데 사용되며, 부팅 중에 커널이 초기화될 때 해당 디렉토리들이 생성됩니다.
시스템이 부팅 중에 해당 디렉토리들이 생성되고 초기화되는 과정은 다음과 같습니다:- 커널 부팅: 시스템이 부팅되면 커널이 메모리에 로드됩니다.
- 가상 파일 시스템 초기화: 커널은 가상 파일 시스템을 초기화하고, 필요한 디렉터리 및 파일을 생성합니다.
- 부팅 완료: 시스템이 부팅이 완료되면 사용자 및 시스템 프로세스가 시작되며, 해당 디렉토리들에 접근하여 필요한 정보를 읽거나 쓸 수 있게 됩니다.
- 일반적으로 가상 파일 시스템 디렉터리들은 시스템이 부팅될 때 생성되며, 시스템이 종료될 때 제거됩니다. 가상 파일 시스템은 시스템 상태와 동적 정보를 제공하는 데 사용되며, 부팅 중에 커널이 초기화될 때 해당 디렉토리들이 생성됩니다.
✔ 결론적으로, 전원이 켜질 때마다 가상 파일 시스템 디렉토리들이 새로 생성되는 것은 일반적인 동작입니다.
이 디렉토리들은 시스템이 시작될 때 동적으로 생성되는 가상 파일 및 디렉토리들을 포함하며, 시스템 종료 시에는 이 정보들이 제거됩니다.
3-2. find명령어를 이용
find / -maxdepth 1 -mindepth 1 -type d | grep -E -v '^/(proc|sys|dev|run|tmp|sdb)$'| xargs -i cp -auf {} /sdb
find 표현식(expression)
표현식 | 의미 |
-maxdepth [n] | 검색 시 주어진 정수값 n만큼의 서브 디렉터리만 검색. (현재 내 폴더에서부터 n 깊이까지만) |
-mindepth [n] | max와 반대 의미입니다. |
*sda1은 두가지 방법*
/dev/sda1 마운트 / -> /dev/sdb1 마운트 /sdb : ls -d /* | grep -v -E '(proc|sys|dev|run|tmp|sdb|usr|var|scr)$' | xargs -i cp -auf {} /sdb
/dev/sda1 마운트 / -> /dev/sdb1 마운트 /sdb: find / -maxdepth 1 -mindepth 1 -type d | grep -E -v '^/(proc|sys|dev|run|tmp|sdb)$'| xargs -i cp -auf {} /sdb
/dev/sda2 마운트 /usr -> /dev/sdb2 마운트 /sdb/usr : cp -auf /usr /sdb/usr
/dev/sda3 마운트 /var -> /dev/sdb3 마운트 /sdb/var : cp -auf /var /sdb/var
/dev/sda6 마운트 /scr -> /dev/sdb6 마운트 /sdb/scr : cp -auf /scr /sdb/scr
장치명 | 마운트위치 | -> | 장치명 | 마운트위치 | 명령어 |
/dev/sda1 | / | -> | /dev/sdb1 | /sdb | find / -maxdepth 1 -mindepth 1 -type d | grep -E -v '^/(proc|sys|dev|run|tmp|sdb)$'| xargs -i cp -auf {} /sdb |
/dev/sda2 | /usr | -> | /dev/sdb2 | /sdb/usr | cp -auf /usr /sdb/usr |
/dev/sda3 | /var | -> | /dev/sdb3 | /sdb/var | cp -auf /var /sdb/var |
/dev/sda6 | /scr | -> | /dev/sdb6 | /sdb/scr | cp -auf /scr /sdb/scr |
✨ xargs는 내용이 많아 따로 포스팅 하겠습니다.
https://sangdal91.tistory.com/123
4. 마운트가 잘되었는지와 용량 확인해보기
lsblk 명령어
- 리눅스 시스템에서 블록 장치(block device)에 대한 정보를 보기 위해 사용되는 유틸리티입니다.
- 블록 장치는 주로 디스크, 파티션, 루트 파일 시스템 등을 포함하는 블록 단위의 저장 장치를 의미합니다.
- ✨ 간단하게 lsblk를 실행하면, 시스템에 연결된 블록 장치들의 계층적인 트리 구조와 간단한 정보를 보여줍니다.
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 9.3G 0 part /
├─sda2 8:2 0 28G 0 part /usr
├─sda3 8:3 0 18.6G 0 part /var
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 14.9G 0 part [SWAP]
└─sda6 8:6 0 395G 0 part /scr
sdb 8:16 0 465.8G 0 disk
├─sdb1 8:17 0 9.3G 0 part
├─sdb2 8:18 0 28G 0 part
├─sdb3 8:19 0 18.6G 0 part
├─sdb4 8:20 0 1K 0 part
├─sdb5 8:21 0 14.9G 0 part
└─sdb6 8:22 0 395G 0 part
mount 로 마운트 되어있는거 상세확인하기
- grep에 있는 ^는 starts with 즉, 해당 본문에서 찾고 하는 문자열로 시작되는 행을 찾아줍니다.
[root@localhost /]# mount | grep ^/dev
/dev/sda1 on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/sda2 on /usr type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/sda6 on /scr type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/sda3 on /var type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
환경 만들기
- 새로운 디스크를 포맷하기
1. 장착된 디스크 확인하기
- ls -l /dev/sd*
- fdisk -l
[root@localhost ~]# fdisk -l
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x06641fba
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 19531775 19529728 9.3G 83 Linux
/dev/sda2 19531776 78125055 58593280 28G 83 Linux
/dev/sda3 78125056 117186559 39061504 18.6G 83 Linux
/dev/sda4 117186560 976773119 859586560 409.9G f W95 Ext'd (LBA)
/dev/sda5 117188608 148436991 31248384 14.9G 82 Linux swap / Solaris
/dev/sda6 148439040 976773119 828334080 395G 83 Linux
Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xe4c2f9f3
2.parted에서 mklabel을 이용하여 파티션 포맷하기
- msdos로 포멧하기
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: ATA TOSHIBA DT01ACA0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 500GB 499GB primary lvm
(parted) mklable
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
resizepart NUMBER END resize partition NUMBER
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU Parted
(parted) mklabel
New disk label type? msdos
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? y
Error: Partition(s) 2 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use.
You should reboot now before making further changes.
Ignore/Cancel? i
(parted) p
Model: ATA TOSHIBA DT01ACA0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
(parted) q
Information: You may need to update /etc/fstab.
/dev/sdb 파티션 구성하기
✔sdb 1~3 주파티션(Primary) 잡기
(parted) mkp
Partition type? primary/extended? p
File system type? [ext2]? xfs
Start? 1
End? 10G
(parted) p
Model: ATA TOSHIBA DT01ACA0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 10.0GB 9999MB primary xfs lba
(parted) mkp
Partition type? primary/extended? p
File system type? [ext2]? xfs
Start? 10G
End? 40G
(parted) mkp
Partition type? primary/extended? p
File system type? [ext2]? xfs
Start? 40G
End? 60G
(parted) p
Model: ATA TOSHIBA DT01ACA0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 10.0GB 9999MB primary xfs lba
2 10.0GB 40.0GB 30.0GB primary xfs lba
3 40.0GB 60.0GB 20.0GB primary xfs lba
✔sdb4번 확장파티션(Extended)잡기
(parted) mkp
Partition type? primary/extended? e
Start? 60G
End? 100%
(parted) p
Model: ATA TOSHIBA DT01ACA0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 10.0GB 9999MB primary xfs lba
2 10.0GB 40.0GB 30.0GB primary xfs lba
3 40.0GB 60.0GB 20.0GB primary xfs lba
4 60.0GB 500GB 440GB extended lba
✔sdb5번에 swap잡기 (시스템타입을 linux-swap로 해줘야한다)
(parted) mkpart
Partition type? [logical]?
File system type? [ext2]? linux-swap
Start? 60G
End? 76G
(parted) p
Model: ATA TOSHIBA DT01ACA0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 10.0GB 9999MB primary xfs
2 10.0GB 40.0GB 30.0GB primary xfs
3 40.0GB 60.0GB 20.0GB primary
4 60.0GB 500GB 440GB extended lba
5 60.0GB 76.0GB 16.0GB logical linux-swap(v1) lba
✔sdb6번에 남은 모든 용량 모아두기
(parted) mkp
Partition type? [logical]?
File system type? [ext2]? xfs
Start? 76G
End? 100%
(parted) p
Model: ATA TOSHIBA DT01ACA0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 10.0GB 9999MB primary xfs lba
2 10.0GB 40.0GB 30.0GB primary xfs lba
3 40.0GB 60.0GB 20.0GB primary xfs lba
4 60.0GB 500GB 440GB extended lba
5 60.0GB 76.0GB 16.0GB logical linux-swap(v1) lba
6 76.0GB 500GB 424GB logical xfs lba
파티셔닝은 완료 !
'리눅스 > 서버운영' 카테고리의 다른 글
[리눅스] 파티션 복사 실습① (부팅중 에러 발생) (0) | 2023.12.07 |
---|---|
xargs 명령어 (입력받아 다음 명령어의 인자로 변환) (0) | 2023.12.01 |
[리눅스] 파일시스템의 종류 (0) | 2023.11.24 |
[리눅스] 파티션(fsdisk, du, /etc/fstab, parted) (0) | 2023.11.24 |
[리눅스] SSH원격 접속하기 (0) | 2023.11.24 |
댓글