예술적인 유닉스 유틸리티 : netcat 과 tar 을 이용한 리모트 백업

연구실에서 간간히 서버관리 역할도 하고 있는데, 최근 제가 관리하던 서버가 맛탱이가 가는 바람에 해당 서버의 데이터를 백업해야 할 일이 생겼습니다. 이번에 백업을 하면서 예전에 배워두었던 netcat 과 tar 의 조합으로 편리하게 했습니다. 이 조합은 다음과 같은 상황에서 빛을 냅니다.

  • 백업할 파티션이 대부분 차 있어 로컬 파티션에 백업할 수 없을 때
  • 퍼미션을 유지하며 리모트 머쉰으로 복사 할 때

tar 에서 f 를 빼고 다음과 같이 하면 stdout 으로 묶은 내용을 출력합니다. 이걸 netcat 로 리모트 머쉰에 쏘는 거지요. 그럼 netcat 를 listen mode 로 켜둔 리모트 머쉰에서는 이 데이터를 받아서 tar 에게 파이프(pipe)로 건내주어 파일로 저장되게 합니다. 그럼 명령어로 한번 볼까요?

우선 백업을 저장할 머쉰 아래 명령을 먼저 수행합니다.

nc -l -p ${PORT} | tar xvf

-l 은 listen mode 로 netcat 를 작동 한는 옵션이며 이렇게 해야 소켓을 열고 접속 요청을 대기 합니다. 다시 말해 서버 처럼 작동합니다. ${PORT} 에는 대기할 port 번호를 입력합니다.

그리고 백업할 데이터가 있는 머쉰, 즉 로컬머쉰에서 다음과 같이 합니다.

tar cvf ${DIR} | nc -q 0 ${HOSTNAME} ${PORT}

nc 에서 -q 명령은 EOF 를 만난후 몇초후에 nc 를 종료할 것인지를 나타냅니다. 위 명령에서는 -q 0 이므로 EOF 를
만나면 바로 종료됩니다. -q 명령을 안쓰면 tar 명령이 끝나도 프롬프트가 나오지 않고 대기하게 되므로 언제 종료되었는지
알기가 힘듭니다. ${HOSTNAME} 은 저 위에 백업을 저장할 머쉰의 주소 입니다.

tar 의 다양한 옵션들을 추가 하면 더욱 쓸만해 집니다. 저 같은 경우 홈 디렉토리를 그대로 백업하기 위해 다음과 같이 합니다.

백업 데이터를 저장하는 머쉰에서

nc -l -p ${PORT} tar xjvpf

백업할 데이터가 있는 머쉰에서

tar cjvpf /home | nc -q 0 ${HOSTNAME} ${PORT}

참고로 말씀드리면 j 는 bzip2 로 압축하는 옵션이며 p 는 퍼미션, 즉 uid와 gid 를 그대로 유지합니다. 아마 tar 옵션을 많이 아신다면 다양한 응용이 가능할 것 같습니다.

오늘도 이 글을 쓰면서 느끼는 거지만 파이프와 함께하는 유닉스 유틸리티들은 말 그대로 예술인 것 같습니다.


리눅스(Linux) 라이브시디(Live CD)로 하드웨어 정보 알아내기

이 글은 일종의 팁입니다.

컴퓨터를 잘 다룬다고 주변으로 인식 받는 사람들은 대부분주변인들에게 컴퓨터를 고쳐달라는 부탁을 받아 봅니다. 처음이나 어린나이에는 우쭐해서 잘 고쳐주다가도 사실 점차 반복되는 부탁과 나이가 들어감에 따라 대부분 귀찮아 하지요.

사용자 삽입 이미지

오죽하면 이런 티를 팔겠습니까?

귀찮아도 지인의 부탁에 고쳐줘야 하는 경우가 있습니다. 고치다 보면 해결책으로 종종 윈도우즈 재설치 처방을 내리게 됩니다. 그런데 문제는 이런 요구를 하는 사람들은 대부분 드라이버 시디를 가지고 있지 않거나 하드웨어 스펙을 잘 모릅니다(주로 랜카드와 비디오카드, 사운드).

그래서 저는 컴퓨터를 고치러 가는 경우 리눅스 라이브시디를 하나 가지고 갑니다(개인적으로 젠투 라이브를 선호 합니다). 하드웨어 스펙을 잘 모르는 경우 라이브시디로 부팅하여 터미널에서 lspci 한방이면 연결된 하드웨어 칩셋의 정보를 모델명까지 잘 보여줍니다.

저의 경우 아래와 같이 나오는 군요.

c0d3h4ck@c0d3h4ck:~$ lspci
00:00.0 Host bridge: Intel Corporation 82P965/G965 Memory Controller Hub (rev 02)
00:01.0 PCI bridge: Intel Corporation 82P965/G965 PCI Express Root Port (rev 02)
00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Contoller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 02)
00:1a.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 02)
00:1c.4 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 5 (rev 02)
00:1c.5 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 6 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev f2)
00:1f.0 ISA bridge: Intel Corporation 82801HB/HR (ICH8/R) LPC Interface Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 02)
01:00.0 VGA compatible controller: nVidia Corporation G71 [GeForce 7900 GS] (rev a1)
02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 12)
03:00.0 SATA controller: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 02)
03:00.1 IDE interface: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 02)
05:02.0 Multimedia audio controller: Creative Labs SB Audigy LS
05:02.1 Input device controller: Creative Labs SB Audigy LS Game Port
05:03.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
05:04.0 Ethernet controller: Marvell Technology Group Ltd. 88E8001 Gigabit Ethernet Controller (rev 14)


여러분도 애용해 보세요~


Follow

Get every new post delivered to your Inbox.

Join 439 other followers