카테고리 보관물: linux

iperf 를 이용한 packet loss 확인

간단하게 iperf를 이용해서 packet loss를 확인 할 수 있다.

 

server 측 (-s(server) -u(udp) -i(interval))

[root@testlab1 ~]# iperf -s -u -i 1
————————————————————
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 208 KByte (default)
————————————————————
[ 3] local 10.65.20.12 port 5001 connected with 10.65.20.191 port 39835
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0- 1.0 sec 114 MBytes 957 Mbits/sec 0.011 ms 14/81400 (0.017%)
[ 3] 1.0- 2.0 sec 114 MBytes 957 Mbits/sec 0.012 ms 0/81377 (0%)
[ 3] 2.0- 3.0 sec 114 MBytes 957 Mbits/sec 0.012 ms 0/81379 (0%)
[ 3] 3.0- 4.0 sec 114 MBytes 957 Mbits/sec 0.014 ms 0/81378 (0%)
[ 3] 4.0- 5.0 sec 114 MBytes 957 Mbits/sec 0.013 ms 0/81378 (0%)
[ 3] 5.0- 6.0 sec 114 MBytes 957 Mbits/sec 0.012 ms 0/81378 (0%)
[ 3] 6.0- 7.0 sec 114 MBytes 957 Mbits/sec 0.013 ms 0/81378 (0%)
[ 3] 7.0- 8.0 sec 114 MBytes 957 Mbits/sec 0.014 ms 0/81377 (0%)
[ 3] 8.0- 9.0 sec 114 MBytes 957 Mbits/sec 0.014 ms 0/81379 (0%)
[ 3] 9.0-10.0 sec 114 MBytes 957 Mbits/sec 0.019 ms 0/81378 (0%)
[ 3] 0.0-10.0 sec 1.11 GBytes 957 Mbits/sec 0.018 ms 14/813845 (0.0017%)

 

client 측

[root@testlab2 ~]# iperf -c testlab1 -u -i1 -b 10000m -w 16KB
————————————————————
Client connecting to testlab1, UDP port 5001
Sending 1470 byte datagrams, IPG target: 1.18 us (kalman adjust)
UDP buffer size: 32.0 KByte (WARNING: requested 16.0 KByte)
————————————————————
[ 3] local 10.65.20.191 port 39835 connected with 10.65.20.12 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 114 MBytes 957 Mbits/sec
[ 3] 1.0- 2.0 sec 114 MBytes 957 Mbits/sec
[ 3] 2.0- 3.0 sec 114 MBytes 957 Mbits/sec
[ 3] 3.0- 4.0 sec 114 MBytes 957 Mbits/sec
[ 3] 4.0- 5.0 sec 114 MBytes 957 Mbits/sec
[ 3] 5.0- 6.0 sec 114 MBytes 957 Mbits/sec
[ 3] 6.0- 7.0 sec 114 MBytes 957 Mbits/sec
[ 3] 7.0- 8.0 sec 114 MBytes 957 Mbits/sec
[ 3] 8.0- 9.0 sec 114 MBytes 957 Mbits/sec
[ 3] 9.0-10.0 sec 114 MBytes 957 Mbits/sec
[ 3] 0.0-10.0 sec 1.11 GBytes 957 Mbits/sec
[ 3] Sent 813845 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 1.11 GBytes 957 Mbits/sec 0.017 ms 14/813845 (0.0017%)
[root@testlab2 ~]#

각  server측과 client측에서 얼마만큼의 packet이 loss되었는지 알 수 잇다.!!!

[ 3] 0.0-10.0 sec 1.11 GBytes 957 Mbits/sec 0.018 ms 14/813845 (0.0017%)

저 빨간색 숫자가 높으면 높을수록 뭔가 물리적으로 문제가 있다는 뜻임…!!

IPMI sol setting

ipmi를 이용한 serial console setting하기를 해봣다.

이걸 하게되면 일반 terminal을 이용하여 물리장비의 booting화면과 grub 화면, login 화면을 물리머신의 monitor앞에 가지 않고서도 text로 볼 수가 있다.

심지어 bios setup도 된다.

 

Screenshot from 2017-07-31 16-33-21

<ipmi sol을 통한 booting화면> 이거 console 부화면팅 인줄 아는사람이 있는데 terminal 화면이다.

일반적인 gnome-terminal 화면임 ㅋ

 

setting하는걸 알아보면…

일단 난 dell R620으로 하였다. ipmi를 지원하는 server들은 아마도 다 되지 않을까 싶다.

1. bios에서 아래와 같이 셋팅을 한다.

Serial Communication : On with Console Redirection via COM2
External Port Address
: Serial Device1=COM1,Serial Device2=COM2
External Serial Connector : Serial Device1
Failsafe Baud Rate
: 115200
Remote Terminal Type : VT100/VT220

 

2. grub 설정

[root@testlab1 default]# diff -urpN /etc/default/{grub-backup,grub}

— grub-backup 2017-07-07 13:41:06.655361133 +0900

+++ grub 2017-07-31 16:14:48.222973918 +0900

@@ -2,6 +2,8 @@ GRUB_TIMEOUT=5

GRUB_DISTRIBUTOR=”$(sed ‘s, release .*$,,g’ /etc/system-release)”

GRUB_DEFAULT=saved

GRUB_DISABLE_SUBMENU=true

-GRUB_TERMINAL_OUTPUT=”console”

-GRUB_CMDLINE_LINUX=”crashkernel=auto rd.lvm.lv=rhgs/root rd.lvm.lv=rhgs/swap rhgb quiet”

+GRUB_CMDLINE_LINUX=”crashkernel=auto rd.lvm.lv=rhgs/root rd.lvm.lv=rhgs/swap rhgb”

GRUB_DISABLE_RECOVERY=”true”

+GRUB_TERMINAL=”serial console”

+GRUB_SERIAL_COMMAND=”serial –speed=115200 –unit=1 –word=8 –parity=no –stop=1″

+GRUB_CMDLINE_LINUX_DEFAULT=”console=tty1 console=ttyS1,115200n8″

[root@testlab1 default]# grub2-mkconfig -o /boot/grub2/grub.cfg

/etc/default/grub을 위에 같이 고친다.

앞에 가 붙은 곳은 빠진곳이고 +가 붙은부분이 추가된 부분이다.

그리고 # `grub2-mkconfig -o /boot/grub2/grub.cfg` 를 실행하여 grub.cfgupdate하자.

 

3. IPMI sol setting

[root@testlab1 default]# ipmitool sol info 1

Info: SOL parameter ‘Payload Channel (7)’ not supported – defaulting to 0x01

Set in progress : set-complete

Enabled : true

Force Encryption : true

Force Authentication : false

Privilege Level : ADMINISTRATOR

Character Accumulate Level (ms) : 50

Character Send Threshold : 255

Retry Count : 7

Retry Interval (ms) : 480

Volatile Bit Rate (kbps) : 115.2

Non-Volatile Bit Rate (kbps) : 115.2

Payload Channel : 1 (0x01)

Payload Port : 623

[root@testlab1 default]# ipmitool sol set force-authentication true 1

[root@testlab1 default]# ipmitool sol info 1 |grep -i authen

Force Authentication : true

force authenticationtrue로 고쳐주자.

 

 

4. ipmi user create

[root@testlab1 ~]# ipmitool user list 1

ID Name Callin Link Auth IPMI Msg Channel Priv Limit

2 root true true true ADMINISTRATOR

일단 root라는 user가 있다.

암호를 다시 셋팅해줘도 되긴 하는데 누군가 쓰고 있을지도 모르니 나만을 위한 user를 하나 만들자.

 

[root@testlab1 ~]# ipmitool user set name 3 admin

user id 2root가 사용하고 있으니 id 3을 이용해서 admin 계정을 만들었다.

 

[root@testlab1 ~]# ipmitool user set password 3 test123

admin userpasswordtest123으로 설정 하였다.

 

[root@testlab1 ~]# ipmitool channel setaccess 1 3 callin=on ipmi=on link=on privilege=4

[root@testlab1 ~]# ipmitool user list 1

ID Name Callin Link Auth IPMI Msg Channel Priv Limit

2 root true true true ADMINISTRATOR

3 admin true true true ADMINISTRATOR

[root@testlab1 ~]#

admin user에게 모든 권한을 다 줬다. root와 똑같이…

 

[root@testlab1 ~]# ipmitool sol payload status 1 3

User 3 on channel 1 is disabled

[root@testlab1 ~]# ipmitool sol payload enable 1 3

[root@testlab1 ~]# ipmitool sol payload status 1 3

User 3 on channel 1 is enabled

마지막으로 sol paylaodenable 시켜준다. 이거 안해주면 admin usersol 사용 불가능함.

 

5. rhel7/centos7 환경에서 getty setting

[root@testlab1 default]# systemctl enable getty@ttyS1

Created symlink from /etc/systemd/system/getty.target.wants/getty@ttyS1.service to /usr/lib/systemd/system/getty@.service.

[root@testlab1 default]# systemctl status getty@ttyS1

getty@ttyS1.service – Getty on ttyS1

Loaded: loaded (/usr/lib/systemd/system/getty@.service; enabled; vendor preset: enabled)

Active: inactive (dead)

Docs: man:agetty(8)

man:systemd-getty-generator(8)

http://0pointer.de/blog/projects/serial-console.html

[root@testlab1 default]# systemctl restart getty@ttyS1

[root@testlab1 default]#

 

이제 접속을 해보면…

youngjulee@youngjulee-ThinkPad-S2:~$ ipmitool -I lanplus -H testlab1-ipmi -U admin -P test123 sol activate

[SOL Session operational. Use ~? for help]

요렇게 나올것이다.

이러면 잘 된거임 ㅋ

 

 

이제 재부팅을 해보자.

youngjulee@youngjulee-ThinkPad-S2:~$ ipmitool -I lanplus -H testlab1-ipmi -U admin -P test123 sol activate

[SOL Session operational. Use ~? for help]

[root@testlab1 ~]# reboot

[ 5215.005606] FAT-fs (sdo): unable to read boot sector to mark fs as dirty

[ 5215.016773] type=1305 audit(1501491730.976:3228): audit_pid=0 old=2081 auid=4294967295 ses=4294967295 res=1

[ 5215.018859] type=1130 audit(1501491730.978:3229): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=lvm2-lvmetad comm=”s’

[ 5215.018876] type=1131 audit(1501491730.978:3230): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=lvm2-lvmetad comm=”s’

[ 5215.019231] type=1130 audit(1501491730.978:3231): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=auditd comm=”systemd’

[ 5215.019244] type=1131 audit(1501491730.978:3232): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=auditd comm=”systemd’

[ 5215.019717] type=1130 audit(1501491730.979:3233): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=systemd-user-session’

[ 5215.019730] type=1131 audit(1501491730.979:3234): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=systemd-user-session’

[ 5215.020219] type=1130 audit(1501491730.979:3235): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=ksm comm=”systemd” e’

[ 5215.020231] type=1131 audit(1501491730.979:3236): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=ksm comm=”systemd” e’

[ 5215.021845] type=1130 audit(1501491730.981:3237): pid=1 uid=0 auid=4294967295 ses=4294967295 msg=’unit=systemd-tmpfiles-set’

[ OK [ 5223.715686] audit_printk_skb: 81 callbacks suppressed

… 생략

[ 5229.200238] sd 1:2:1:0: [sdc] Synchronizing SCSI cache

[ 5229.263038] sd 1:2:0:0: [sdb] Synchronizing SCSI cache

[ 5229.325825] sd 0:2:0:0: [sda] Synchronizing SCSI cache

[ 5231.830824] failed to kill vid 0081/0 for device em4

[ 5232.203091] br-em3: port 1(em3) entered disabled state

[ 5232.267099] failed to kill vid 0081/0 for device em3

[ 5232.612309] failed to kill vid 0081/0 for device em2

[ 5232.957757] failed to kill vid 0081/0 for device em1

[ 5233.024440] Restarting system.

[ 5233.063405] reboot: machine restart

reboot log가 나오고…

 

Screenshot from 2017-07-31 18-12-16

부팅로그가 나온다..!!

<이 블로그를 참조 함. http://coffeenix.net/board_print.php?bd_code=1767>

ubuntu touchpad disable

touchpad가 너무 민감한건지 싫컷 타이핑 하고 있으면 어먼데 클릭이 되서 원하지 않는곳에 타이핑이 들어갔었다.

난 이걸 계속 function key 조합해서 키고 끄는걸 찾고 있었는데, OS level에서 당연히 되어야 하는 기능이었다.

역시나 찾아보니 xinput 이란게 있더라…

man page에는 “X input의 test나 설정을 하는 도구.” 라고 나와있다.

간단하게 사용법을 보면…

root@youngjulee-ThinkPad-S2:~# xinput –list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech TrackPoint id=13 [slave pointer (2)]
⎜ ↳ USB Optical Mouse id=15 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=12 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Integrated Camera id=10 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=14 [slave keyboard (3)]
root@youngjulee-ThinkPad-S2:~#

위에서 touch pad의 id를 검색한다.

그리고 여러가지 기능들이 있는데 이중에 우리가 쓸것은 “Enable” 그 자체이다.

root@youngjulee-ThinkPad-S2:~# xinput –list-props 12
Device ‘ETPS/2 Elantech Touchpad’:
Device Enabled (139): 0
Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (268): 1
Device Accel Constant Deceleration (269): 2.500000
Device Accel Adaptive Deceleration (270): 1.000000

그리고 –set-prop option을 이용해서 키고 끄는것을 할 수가 있다.

root@youngjulee-ThinkPad-S2:~# xinput –set-prop 12 “Device Enabled” 0

마지막으로 쓰기 쉽도록 alias를 걸어두자.

root@youngjulee-ThinkPad-S2:~# alias touch
alias touch=’xinput –set-prop 12 “Device Enabled”‘
root@youngjulee-ThinkPad-S2:~# touch 0
root@youngjulee-ThinkPad-S2:~# touch 1

이제 원할 때 아무대나 terminal을 열어서 touch pad를 키고 끌 수 있다. !!

 

kvm windows 10 storage driver IDE to virtio change

windows 10을 설치 한 후 virtio driver를 인스톨 해봤다.

이는 이미 IDE driver를 사용하여 설치를 한것이며, 오늘 할것은 IDE -> virtiostorage driver를 옮기는 것이다.

그냥 하면 BSOD에서 INACCESSIBLE_BOOT_DEVICE 요런 message가 뜨면서 안되더라.

그래서 찾아보니까 http://superuser.com/questions/1057959/windows-10-in-kvm-change-boot-disk-to-virtio 여기에 딱 맞는 case가 있어서 따라해봤다.

The steps to follow in general are :

  1. Install the VirtIO drivers in the VM

  2. Set the system disk of the VM to use VirtIO

  3. If the VM does not boot, execute Startup Repair or even Repair Install

The procedure in detail is :

  1. Return the boot disk to IDE.

  2. Make sure the windows VM is shutdown.

  3. Download the VirtIO drivers ISO from here.

  4. Mount it on the CD drive for the VM.

  5. Add a storage device which is of the VirtIO type. The size allocation doesn’t matter since you are using it to install the drivers.

  6. Start the Windows VM. It will try to install the drivers. If it doesn’t, open the Device Manager and you should see the SCSI device listed with the exclamation point icon beside it. You can choose to update the driver and point to mounted ISO’s appropriate directory. Once installed, don’t reboot but shutdown the machine.

  7. In the virt-manager settings for Windows, change the storage type from IDE to VirtIO.

  8. You can remove the storage device you had created earlier. It is not longer needed.

  9. Start Windows, it should boot up and install the SCSI drivers. You will need to reboot after it does.

  10. If the VM does not boot but the drivers are installed, you might try to do :

    1. Startup Repair that can fix certain system problems that might prevent Windows from starting.

    2. The last solution: Repair Install while booting from the Windows 10 ISO. This will keep all applications and user settings, just refreshing Windows and boot. Use a recent Windows 10 ISO.

위의 답변에나온 action을 순서대로 따라해 주면된다.

1. 먼저 IDE 방식으로 boot disktype으로 바꾼 후 정상부팅 되게 한다.

2. 당연히 vmshutdown 상태여야 하고,

3. virtio driver를 다운로드 받는데… https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ 이 주소에서 가장 최근것을 받으면 된다.

4. vmcdrommount해주고… 아직 켜진마라.

5. storage device를 하나 더 추가로 넣어주는데 이번엔 virtio type으로 만들자. size는 상관없다.

6. windows vm을 시작한다. 이제 mountcdrom에 있는 driver를 설치를 할건데 이때부터가 좀 중요함.

win + R’ key를 눌러서 command 입력창이 뜨면 ‘devmgmt.msc를 입력하자. 그럼 장치관리자가 뜰텐데 여기에 ‘삼각형 느낌표’가 떠있는 장치들이 몇개 보일것이다. 각각 인식되지 못하는 device들인데, 하나씩 드라이버를 설치 해주자. 이게 뭔 device 인지 확인 하려면 bash terminal에서 ‘virsh edit win10vm’ (win10vm은 가상머신 이름) 이렇게 입력해주면 해당 vm에 대한 xml format의 정보를 볼 수가 있는데, 여기에 저 장치들이 어떤것인지 나와있다. 장치관리자에서 느낌표가 뜬 장치를 더블클릭해보면 ‘위치’ 라는 곳이 보이는데 여기에 이 device가 어디에 붙어 있는지가 나와있다. ‘PCI 슬롯 9이렇게 되어 있다. 이제 virsh edit로 연 vm 정보에서 검색을 해보자. slot 9로 검색을 해보면 해당 device가 뭔지 나와있다. 나같은 경우 virtio-serialmembaloon을 설치해줬다. 설치하는 방법은 해당 느낌표뜬 장치에서 ‘드라이버 업데이트’ 를 눌르고 ‘컴퓨터에서 드라이버 소프트웨어 찾아보기’ 를 선택 한 후 ‘찾아보기’ 에서 cd mount된 곳의 해당 driverwindows version에 맞게 설치 해주면 된다.

7. 이제 다시 shutdown을 해주고, 아까 붙인 virtio storage는 떼버리자 이제 쓸모가 없음. 이제 IDE로 되어 있는 boot devicedisk bus virtio로 고친 후 재부팅을 해주자.

나는 10번까진 하지않았고 위에처럼만 해도 잘 되더라.

아참 혹시라도 display driverqxl로 되어 있을지 모르니 windows 8 이상은 cd mount한 곳에서 qxldod도 설치 해주자.

아… 근데 설치를 해도.. 느리더라… 조금 빨라진것도 같지만

cd burn … 하는 방법… cd 굽기

맨날 dvd만 굽다가 용량이 작은 data를 구울려고 cd 를 써서 구운적이 있다.

그런데 다 굽고나서 잘되는지 mount를 하려고 하면 error가 뜨더라.

[1121 15:22] sr 2:0:0:0: [sr0] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE

[ +0.000016] sr 2:0:0:0: [sr0] tag#0 Sense Key : Illegal Request [current]

[ +0.000012] sr 2:0:0:0: [sr0] tag#0 Add. Sense: Illegal mode for this track

[ +0.000010] sr 2:0:0:0: [sr0] tag#0 CDB: Read(10) 28 00 00 00 d5 5c 00 00 02 00

[ +0.000009] blk_update_request: I/O error, dev sr0, sector 218480

[ +0.010817] sr 2:0:0:0: [sr0] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE

[ +0.000019] sr 2:0:0:0: [sr0] tag#0 Sense Key : Illegal Request [current]

[ +0.000020] sr 2:0:0:0: [sr0] tag#0 Add. Sense: Illegal mode for this track

[ +0.000013] sr 2:0:0:0: [sr0] tag#0 CDB: Read(10) 28 00 00 00 d5 5d 00 00 01 00

[ +0.000010] blk_update_request: I/O error, dev sr0, sector 218484

[ +0.000012] Buffer I/O error on dev sr0, logical block 54621, async page read

[ +0.365453] ISO 9660 Extensions: Microsoft Joliet Level 3

[ +0.002880] ISO 9660 Extensions: RRIP_1991A

대충 살펴 보니까… /dev/sr0218480 sector를 읽을 수 없다고 하는것 같다.

그런데… mount를 해보니 data는 잘 보여서 그냥 쓸 까… 했는데 의심쩍어서 찾아봤더니 이런게 있더라.

Peter (darkcentrino) wrote :

#27

The Problem is the CD, when you burn the iso to a DVD, everything is fine!
I have found this links:
http://<email address hidden>
http://www.troubleshooters.com/linux/coasterless.htm

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/266951

위에 petercd로 구워서 그런거고, dvd로 구우면 문제없이 잘 된다..!! 라고 알려준다. 실제로 DVD 한장을 낭비해서 구워보니까 error안뜨고 잘 mount 되더라.

그리고 링크 하나를 던져 주는데… 들어가서 확인 해보니까

NOTE

There are many ways to burn a CD, including applications like xcdroast and gtoaster. Most are good, so use whichever suits your needs. Just remember the basic principles from this section:

  • Burn at the right speed

  • Pad properly (padsize=63s and -pad)

  • Use disk at once (-dao)

  • Unless your burner prevents buffer underflow, do no other work while you’re burning.

cd 구울때 위의 기본 원칙들을 꼭 주의 하란다. ( wodim으로 그냥 아무 옵션없이 구웟음…)

저 친구가 알려준 원칙대로 구워보자.

# cdrecord dev=0,0,0 speed=10 padsize=63s -pad -dao -v -eject /home/myuid/myiso.iso

위에서 바뀌어야 할 부분은 dev , speed, /home/… 요렇게 이다. speed를 그냥 기본으로 하면 알아서 맞춰주는줄 알앗는데 아닌가보다.

dev는 아래의 command로 확이 가능하다.

# cdrecord -scanbus

scsibus2:

2,0,0 200) ‘HL-DT-ST’ ‘BD-RE BP40NS20 ‘ ‘ML01’ Removable CD-ROM

2,1,0 201) *

2,2,0 202) *

speed2개중 낮은 값으로 해야되는데… 뭐냐면 cd writer기와 cdrom에 적혀있는 1x-52x 이런 값중 낮은값을 선택해서 해야한단다. 반드시…!

확인을 해보면…

# sysctl dev.cdrom.info

dev.cdrom.info = CD-ROM information, Id: cdrom.c 3.20 2003/12/17

dev.cdrom.info =

dev.cdrom.info = drive name: sr0

dev.cdrom.info = drive speed: 24

dev.cdrom.info = drive # of slots: 1

위 처럼 sysctl을 이용해서 drivespeed를 확인해도 되고 직접 sysfs를 뒤져봐도 되고 proc을 뒤져봐도 되고등등 여러가지 방법이 있다.

cdromspeedcdrom 위에 1x-52x 이렇게 명시되어 있을 것이다. 저뜻은 1부터 52배속까지 원하는걸로 쓸 수 있다는 뜻 같다.

이제 다 됐으니… 구워보자.

# cdrecord dev=2,0,0 speed=24 padsize=10 -pad -dao -v -eject ~/iso/MegaRaid_Software.iso

TOC Type: 1 = CD-ROM

wodim: Operation not permitted. Warning: Cannot raise RLIMIT_MEMLOCK limits.

scsidev: ‘2,0,0’

scsibus: 2 target: 0 lun: 0

WARNING: the deprecated pseudo SCSI syntax found as device specification.

Support for that may cease in the future versions of wodim. For now,

the device will be mapped to a block device file where possible.

Run “wodim –devices” for details.

Linux sg driver version: 3.5.36

Wodim version: 1.1.11

SCSI buffer size: 64512

Device type : Removable CD-ROM

Version : 0

Response Format: 2

Capabilities :

Vendor_info : ‘HL-DT-ST’

… wodim을 불러오네 … wodim으로 구워서 잘못됏다고 생각했는데 그냥 사용자가(내가..)잘못 쓴거였음.

암턴 다시 mount를 해보자…

# sudo mount /dev/sr0 /mnt/cdrom/

# dmesg -wH

[1121 16:20] ISO 9660 Extensions: Microsoft Joliet Level 3

[ +0.145748] ISO 9660 Extensions: RRIP_1991A

잘된다!!

hypervisor 에서 xrdp를 썼을 때 생기는 문제…

xrdp를 사용하다가 난감했던 경우가 있다.

한번은 고객상서 xrdp 접속이 안된다는 것이다. 그래서 가봤더니 진짜 안되더라. 문제는 특정 vmxrdp가 써야하는 5910 port를 쓰고 있어서 안되는것이엇다. 그래서 이 vm을 죽이고 띄웠더니 되더라.

이것은 한시적인 해결법이고 언제든 또 저 port를 누군가가 점유하고 있으면 xrdp접속이 안될것이다.

그래서 저 5910 포트를 다른것으로 고쳐야지 완전한 해결책이 되는데…

그 때 정말 한참 찾아봤던걸로 기억한다.

hypervisor에서 xrdp를 사용 할 경우 vm이 사용하는 port와 다른 port를 사용하게 해줄 필요가 있다.

xrdp는 기본적으로 5910번 부터 5920번까지 10개의 세션까지 붙을 수 있게끔 되어 있다. 아래서 옵션을 확인해보자.

만약 hypervisorvm10개 미만으로 올라가 있다면 문제는 생기지 않는다. 하지만 위에서 생긴 문제는 hypervisorvm100개 가량 돌고 있었고…ㄷㄷ 당시 이것을 구축한 사람은 문제해결을 못해서 쩔쩔매고 있었다. 나도 엄청 찾았다. 그도 그럴게 xrdp가 동작방식이 되게 베베꼬여있다.

그냥 3389 portservice를 해주는 것이 아닌… 일반적인 windows 환경에서 RDP 3389 port로 요청을 보내면 xrdpxrdp-sesman 3350 port로 요청을 전달한다. 그럼 xrdp-sesmanXvnc를 써서 vncserver를 구동 한 후 그것을 다시 3389로 보내서 연결 시켜주는 형식이다. 이걸 당시 debug mode를 써서 알아냈었다…

암턴 … 저때의 Xvnc 가 생성하는 port가 기본적으로 5910번부터 5920번 까지 사용하는데… 이걸 다른 process가 막아버리면 얘는 당연히 뜨질 못하고 연결이 안되는것이다.

자 그럼… config file을 열어보면…

# vim /etc/xrdp/sesman.ini

[Sessions]

X11DisplayOffset=10

MaxSessions=10

KillDisconnected=0

IdleTimeLimit=0

DisconnectedTimeLimit=0

요런 구문이 있는데 “X11DisplayOffset이놈이 Xvnc vncserver display session offset을 결정하는 구문이다. 쉽게말해 저걸 100으로 고치면 5900 + 100 이 되어 Xvnc 6000번 부터 port를 사용하게 된다.

그리고 아래의 “MaxSessions는 허용할 session의 총 갯수이다. 기본으로 10개까지 허용하고 있다. 이러면 Xvnc 6000 ~ 6010 까지의 port를 사용하게 될것이다.

후… 옛날에 설정 해놓고 잊어버렸던거라 가물가물 했었는데 … posting 하니까 한결 편해졌다. 이제 안까먹겠지… ㅋㅋ

NTP server config

NTP server setting

ntp server … 당연한듯 하면서도 매우 어렵다.

RHEV 시험을 보는데 ntp 설정을 하지 못해 쩔쩔맨적이 있다. 이때 뿐만이 아니라 time이란게 당연히 맞다고만 생각하지 어떻게 맞는지는 생각해본적이 없었던 것 같다.

이전에 한번 ntp에 관해 조금 본적이 있는데… 그때도 굉장히 어려워서 잘 이해가 안갔었다. 그래서 일단 그냥 되는거 외워서 쓰자 라고 생각했는데… 역시나 외워서 쓰는데는 한계가 있다.

그래서 이번에 조금 더 살펴 봤다.

ntpnetwork로 연결되어 있는 컴퓨터들끼리 clock 시각을 동기화 시키는데 사용되는 protocol이다.

ntpcomputer clock 시간을 1/1000초 이하 까지 동기화 시키기 위해 협정세계시(UTC Coordinated Universal Time)를 사용한다.

Computer network 에서 정확한 시간을 유지하는것은 여러가지 이유로 아주 중요하다. 수십분의 1초 정도의 차이만으로도 큰 문제가 발생될 수 있다.

예를 들어 보안메커니즘이나 여러대의 컴퓨터가 하나의 파일시스템을 수정하는것(NFS, CIFS)이나, 그 반대의 경우(분산 파일 시스템 ceph, lustre …)에도 정확히 동기화된 clock 시간에 의존해야 한다. 항공기의 운항 궤적을 그림으로 표시해 주는 항공관제 시스템에도 매우 정확한 시간측정이 요구되는것은 당연하다.

협정세계 시각은 무선이나 위성시스템 등 여러가지 방법으로 얻어진다. GPS 나 정부기관 등과 같은 특수한 수신자들은 보다 높은 수준의 서비스를 이용하는것이 가능하지만, 모든 컴퓨터에 수신기를 장착하는것은 비 경제적이며, 현실성이 없다. 그 대신에 시각 서버로 지정된 컴퓨터들에만 수신기를 장착하고, 이 서버들과 network으로 연결되어 있는 computer들의 clock 시각은 NTP 와 같은 protocol을 사용하여 동기화 하는 것이다.

협정세계시 로부터 떨어져 있는 수준을 표시하기 위해 흔히 계층번호를 쓰는데 0번 계층은 전용 송신기 또는 위성 위치추적 시스템으로 부터 수신된 실제 시각인 무선 클록을, 1번 계층은 이 무선 클록과 직접 연결되어 있는 컴퓨터의 클록을, 2번 계층은 1번으로부터 시각을 받은 컴퓨터 등으로 원천 협정 세계시로부터 멀수록 계층 번호거 커져 간다.

NTP라는 용어는, protocol과 컴퓨터상에서 실행되는 client / server program, 둘 모두에 대해 사용된다. program은 사용자에 의해 NTP client , NTP server 또는 둘 모두로 해석 될 수 있다. NTP client는 시각 server에 정확한 현재 시각을 교환할 것을 요구한다. 이 교환의 결과를 통해, clientserver의 시각과의 차이를 이용하여 link 지연시간을 계산할 수 있으며, 자신의 clockserver에 있는 clock 과 일치 하도록 조정할 수 있다. 하나의 규칙으로서, 처음 clock을 맞추기 위해서는 5~10 분동안 모두 6번의 시각 교환이 요구된다. 일단 시각 동기화가 끝나면, client는 매 10분 마다 message 교환을 통해 clock을 수정 한다. Clock 동기화의 신뢰도 및 정확도를 높히기 위해서 여러대의 서로 다른 server와 다양한 network경로가 사용된다. Client / server 동기화에 아울러, NTP broadcast 를 통한 컴퓨터 clock동기화도 지원한다. NTP는 매우 높은 수준의 내 고장성과 확장 가능성을 염두에 두고 설계 되었다.

NTP server 에서 사용되는 용어

– Reference Clock – GMT, UTC와 같이 표준시간 또는 참고 시간( 기준 시간 )

– Strata – NTP sever의 계층적 구조

– Stratum-1 Server – NTP 1 계층 server

– Stratum-2 Server – NTP 2 계층 server

– … -15 계층 까지 존재.

– Drift file – PPM(Parts-Per-Million) 단위로 offset에 일치하는 단일 부동 소수점이 들어가 있다. (:/var/ntp/ntp.drift)

– Resolution – 시간 제공 장치에서 사용하는 시간의 최소 단위.

) 손목시계의 Resolution : 1

– Precision – 컴퓨터 프로그램에서 사용하는 시간의 최소 단위.

– Accuracy – 시간의 정확성. 기준시간(UTC) 과 얼마나 근접한가를 나타냄.

– Jitter – 시간을 측정했을 때 생기는 오차 중 작은 값.

– Wander – 시간을 측정 했을 때 생기는 오차 중 큰 값.

UTC & GMT

UTC (Universal Time Coordinate) 협정세계시, 그리니치 표준시 대신에 사용되는 표준시. 협정세계시는 국제사회가 사용하는 과학적 시간의 표준이다.

197211일 부터 시행된 협정세계시에서는 67년 국제도량형총회가 정한 세슘원자의 진동수에 의거한 초의 길이가 그 기준(원자초)으로 쓰인다. 그 때까지 시간의 기준으로는 지구의 자전에 의한 평균태양시와 지구의 공전에 의한 태양년에서 산출한 초의 길이가 쓰였다. 그리니치 표준시(GMT)는 원래 평균태양시를 기준으로 한 것이었다. 따라서 원자시계를 표준으로 하면서 부터 GMT라는 명칭이 실체(実体)를 바르게 나타내지 못하는 불합리한 점이 생겼다. 이러한 문제를 없애기 위해서 1978년 국제무선통신자문위원회(CCIS)총회는 통신분야에서는 금후 그리니치평균시를 협정세계시(UTC)로 바꾸어 쓰자는 권고안을 채택하였다.

GMT(Greenwich Mean Time) 그리니치 표준시.

그리니치 천문대를 지나는 본초자오선(그리니치자오선)을 기준으로 하는 시. 약호 GMT. 약칭하여 그리니치시 라고도 한다. 1925년 이전의 그리니치시는 정오를 0 시로 하여 시간을 재기 시작하는 방식의 천문학용 평균태양시의 명칭이었다. 이에 반해 일상생활에서는 자정을 0시로 하여 시간을 재는 방식이 사용되었으며, 이것을 그리니치상용시(GCT)라고 하였다. 192511일 국제천문연합에서는 그리니치시를 12시간 압당겨 그리니치상용시와 일치 시켰으며, 이를 세계시라고 하여 전세계 공통의 표준시로 사용하였다. 그러나 지구의 자전을 근거로 한 이 세계시는 수정시계나 원자시계와 비교한 결과 지구 자전의 불규칙성에 의한 오차가 있으므로 1972년 이후에는 새로이 협정세계시가 세계표준시로 사용되었다. 협정세계시란 세계시와는 달리 원자 방사의 진동수를 기준으로 하고, 원자시의 초를 세분화 하여 세계시와의 차이가 0.9초 이내가 되도록 만든 것이다.

# date +%s command 입력 시 197211일 로 부터 몇초가 흘렀는지 확인 할 수 있다.

1468925136 초 만큼 흘러 있더라…

단절된 환경에서의 ntp server 를 만들어보자.

원격에 ntp server 가 있는경우 client 로 연결 시키는 건 쉬우므로…

# vim /etc/ntp.conf

driftfile /var/lib/ntp/drift

restrict default nomodify notrap nopeer noquery

restrict 127.0.0.1

restrict ::1

restrict 10.1.0.0 mask 255.255.255.0 nomodify notrap

server 127.127.1.0 iburst

fudge 127.127.1.0 stratum 10

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

disable monitor

###

Server 127.127.t.u

fudge 127.127.t.u stratum 10

t clocktype이고 uunit number 이다.

t Clock type 46가지나 있지만 흔히들 단절된 환경에서 ntp server 를 꾸리는거면 1을 쓰면된다.

만약 GPS나 원자시계를 이용해서 NTP server 를 꾸리는 거라면 PTP(Precision Time Protocol) manual page를 찾아보자.

u  0 ~ 3 사이의 unit number 를 쓰면 된단다. 일반적으로 0을 쓴다.

그러면 server 127.127.1.0 이 되는데 여기서 중요한점, 절대로 localhost127.0.0.1 이렇게 적어 넣으면 안된다. Ntp server 에서의 127.127 local의 시간을 참조한다는 뜻이므로 반드시 시켜줘야한다.

아래의 fudge 는 날조하다 사기치다 라는 뜻이 있는데, ntp server stratum을 날조 시켜 준다. 이 이후 부터 붙는 client들은 stratum11이 되는것이다.

fudge 127.127.1.0 stratum 10

restrict 구문은 service 를 허용 할 access control list이다.

# man ntp_acc command로 사용법을 확인 할 수 있는데. 각 한줄 씩 알아보면…

restrict default nomodify notrap nopeer noquery

default 0.0.0.0/0 을 의미한다.

nomodify run time중에 재설정을 허용하지 않는다는 의미이다.

notrap mode 6 controll message trap service를 거부 하겠다는 의미이다.

nopeer 동일계층의 peer를 만들지 않겠다는 의미이다. 지금 설정에서는 stratum 11 peer이다. client가 아니다. Client stratum 12이다.

noquery ntpq, ntpdc querie에 응답하지 않겠다는 의미이다.

종합해보면 모든대역에서 오는 쿼리를 응답하지 않겠다는 의미이다. 이것은 기본설정에 들어가 있다.

rstrict 127.0.0.1 ### 자기 자신에게 허용을 하겠다는 의미이다.

restrict ::1 ### ipv6 의 자기자신에게 허용을 하겠다는 의미이다.

restrict 10.1.0.0 mask 255.255.255.0 nomodify notrap

이 구문이 우리가 service를 허용할 대역이다.

includefile /etc/ntp/crypto/pw ### ntp.conf 의 추가 설정파일을 지정한다. pw file을 열어보면 암호화된 password를 적으라고 되어 있는데 궂이 저기 적지 않고 ntp.conf 에 적거나 다른 어딘가에 지정하여 적어도 상관없다.

keys /etc/ntp/keys ### md5 로 암호화된 key file 의 위치를 지정한다.

disable monitor ### monitoring을 비활성화 한다. 일반적인 ntp server 에서는 monitoring을 사용하지 않는다.

# systemctl restart ntpd

### ntp service 기동

# systemctl enable ntpd

다음 아래 두개의 command를 사용하여 상태를 확인하자.

[root@controller ~]# ntpstat

synchronised to local net at stratum 11 ## 11 계층에서 동기화 됨 을 의미 10ntp service이고 이 service를 받는 local computer11 계층이 된다.

time correct to within 11 ms ## 11 milli second 이내에서 정확하다 라는 의미이다.

polling server every 64 s ## ntp server 에서 64초에 한번씩 시간을 가져온다.

[root@controller ~]# ntpq -p

remote refid st t when poll reach delay offset jitter

==============================================================================

*LOCAL(0) .LOCL. 10 l 25 64 377 0.000 0.000 0.000

[root@controller ~]#

맨 앞의 * remote server 의 상태 mark이다.

Mark

‘ ‘ (reject ) communication이 불가능한 서버

x’(falseticker)falseticker 검사결과 사용되지 않는 서버

.’(execess) 참조서버가 많아서 사용되지 않는 서버

’(outlayer) clustering 검사결과 사용되지 않는 서버

+’(candidat) 접속 test를 합격하여 언제든지 참조가 가능한 서버

#’(selected) 동기 거리가 멀지만 참조가 가능한 서버

*’(sys.peer) 동기중인 서버

o’(pps.peer) 동기중인 서버(동기는 PPS 신호로 부터 간접적으로 행해짐.)

remote # local(0)으로부터 시간을 가져왔다는 뜻이다. local(0)10계층이며(service를 받는 local computer11 계층이다.) 현재 local system clock을 뜻한다.

refid # Kiss code reference id를 나타낸다. 해당 ntp serverreference 하고 있는 serveripcode가 나온다. 현재의 경우 stratum 10 을 가리키고 있는 것이고, 이는 ntp server local에 있는 system clock을 가리킨다. Ntp server local stratum 11이다. Client 12 이고

refid 는 다음과 같이 있다.

The refid can have the status values:

An IP address – The IP address of a remote peer or server;

.LOCL. – This local host (a place marker at the lowest stratum included in case there are no remote peers or servers available);

.PPS. – “Pulse Per Second” from a time standard;

.IRIG. – Inter-Range Instrumentation Group time code;

.ACTS. – American NIST time standard telephone modem;

.NIST. – American NIST time standard telephone modem;

.PTB. – German PTB time standard telephone modem;

.USNO. – American USNO time standard telephone modem;

.CHU. – CHU (HF, Ottawa, ON, Canada) time standard radio receiver;

.DCFa. – DCF77 (LF, Mainflingen, Germany) time standard radio receiver;

.HBG. – HBG (LF Prangins, Switzerland) time standard radio receiver;

.JJY. – JJY (LF Fukushima, Japan) time standard radio receiver;

.LORC. – LORAN-C station (MF) time standard radio receiver. Note, no longer operational (superseded by eLORAN);

.MSF. – MSF (LF, Anthorn, Great Britain) time standard radio receiver;

.TDF. – TDF (MF, Allouis, France) time standard radio receiver;

.WWV. – WWV (HF, Ft. Collins, CO, America) time standard radio receiver;

.WWVB. – WWVB (LF, Ft. Collins, CO, America) time standard radio receiver;

.WWVH. – WWVH (HF, Kauai, HI, America) time standard radio receiver;

.GOES. – American Geosynchronous Orbit Environment Satellite;

.GPS. – American GPS;

.GAL. – Galileo European GNSS;

.ACST. – manycast server;

.AUTH. – authentication error;

.AUTO. – Autokey sequence error;

.BCST. – broadcast server;

.CRYPT. – Autokey protocol error;

.DENY. – access denied by server;

.INIT. – association initialized;

.MCST. – multicast server;

.RATE. – (polling) rate exceeded;

.TIME. – association timeout;

.STEP. – step time change, the offset is less than the panic threshold (1000ms) but greater than the step threshold (125ms).

st # 몇 계층의 stratum을 참조 하는지 나타낸다.

t # type 을 나타낸다. u : unicast, b : broadcast, l : local

when # 마지막 패킷을 가져온 후로부터 몇초가 지났는가를 뜻한다.

Poll # 몇초에 한번씩 시간을 가져 오는지 나타낸다.

Reach # 시간을 가져온지 얼마나 지났는가를 나타내는데… 8진수로 나타내면서… 8비트 까지 밖에 못 나타낸다. 이게 ntp server 가 기동해서 몇번이나 시간을 가져 왔는가를 체크하는것 같다. 최대가 377인데 2진수 11111111 8진수 이다. 패킷을 1번 가져 올때마다 1비트씩 1로 체운다. 처음 시작할 때는 1(00000001) 로 시작한다. 이때의 reach1이다. 이게 너무 낮으면 내 아래의 client가 시간을 가져가지 못한다. 37(00011111) 최소 5번의 패킷을 가져오기 전 이라면 clien가 시간을 가져가지 못하더라.

Delay # roundtrip delay

offset # offset

jitter # 시간을 측정했을 때 생기는 오차 중 작은 값

 

client 에서의 설정

client # vim /etc/ntp.conf

server 10.1.0.11 iburst

### 위 구문을 추가 해 준다. 10.1.0.11 ntp server ip 이다.

iburst initialization burst인데 ntp service를 기동하면 첫 패킷을 8번 연속으로 보냄으로서 좀더 빨리 시간동기화를 하게 해준다.

[root@compute1 ~]# ntpstat

synchronised to NTP server (10.1.0.11) at stratum 12

time correct to within 15 ms

polling server every 64 s

[root@compute1 ~]# ntpq -p

remote refid st t when poll reach delay offset jitter

==============================================================================

*controller.test LOCAL(0) 11 u 26 64 377 1.159 -0.110 0.148

client 에서 이렇게 나오면 잘 연결이 된것이다.

 

다음을 참조 함

http://asone.tistory.com/169

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/index.html

http://nlug.ml1.co.uk/2012/01/ntpq-p-output/831

http://se.uzoogom.com/185

rhel 7 network interface naming

RHEL 7 network interface naming

eno1… enp0s31f6…

rhel7부터 ethernet network card naming 방식이 바뀌었다.

이전에는 eth0,1,2,3…. 이렇게 순서대로 했었던 걸 좀더 직관적으로 바꿨단다. Manual에서…

일단 rhel7로 오면서 naming policy3종류가 있는데, systemd, biosdevname, system Z 에서의 naming 이렇게 3개의 방식이 있다. System Z 에서의 naming은 본적이 없다. System Z 를 본적이 없으므로 ㅋㅋ . 참고로 system Z IBM system Z mainframe 을 뜻한다.

처음부터 살펴보면…

예측가능한 network interface device naming

interface type 에 따라 접두어가 달라진다.

1. en ethernet

2. wl wireless lan

3. ww wireless wan

systemd scheme 서열 policy

기본적으로 아래 5가지의 scheme policy 를 사용해서 naming을 하게된다.

Scheme 1. : firmware bios onboard device 에 대해 제공하는 색인번호를 조합한 이름(: eno1 ) firmwarebios로 부터의 정보를 적용가능한 경우는, 이것이 적용된다. 그렇지 않으면 scheme 2fallback 한다.

### bios로 부터의 정보를 적용가능한 경우라는 것은, smbios(system management basic input/output system) 에서 정보를 받을 수 있는경우를 뜻한다. Smbios bios 내의 data 구조의 배치 및 access method에 관하는 수단이다. 흔히들 잘 쓰는 dmidecode 도 이 smbios 에서 정보를 가져와서 보여주는 것이다. 현재 3.0 까지 나와 있는데 2.6 이전 버전에서는 smbios 정보가 현재와는 틀려서 pci device의 정보가 없는경우가 있다. 이럴 경우 bios 로 부터 정보를 가져올 수 없으며, 다음 scheme로 넘어간다 는 뜻이다. ###

Scheme 2. : 1과 같은데 onboard가 아니라 pci express hotplug slot 에 꽂혀져 있는 network device일 경우 적용된다.(: ens1) 마찬가지로 bios에서 정보를 못가져 오면 scheme 3으로 넘어간다.

Scheme 3. : hardware connector 의 물리적인 장소를 조합한 이름이다.(: enp2s0) 이것이 적용 불가능한 경우 scheme 5로 넘어간다.

### Hardware connect 의 물리적인 장소라 함은 dev path를 뜻한다. 물리장치의 devpath name을 적용한다는 뜻.예를들어 내 pc에서 적용된 것을 살펴보면…

# lspci -vt

-[0000:00]-+ …

\-1f.6 Intel Corporation Ethernet Connection I219-V

enp<bus>s<slot>[f<function>][d<dev_id>]

이렇게 적용 되는데 저위의 정보대로 이름을 만들어 보자면…

enp0s31f6 이라는 이름이 만들어 진다.

실제로 # ip link command로 정보를 살펴 보면

2: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP>

요렇게 나와 있는것을 볼 수 있다. ###

Scheme 4. : interface mac address를 조합하여 만든 이름이다. default로는 사용되지 않지만, user가 선택하면 적용가능하다. (: enx78e7d1ea46da)

### 나같은 경우는 usb network interface card 를 꽂으니까 이렇게 나오더라. 따로 선택하거나 하진 않았음. ###

Scheme 5. : 종래형의 예측 불가능한 커널 명명 scheme (: eth0 ), 모든 방법이 실패하면 이게 사용된다.

정리하면…

o<index> onboard device 의 색인번호

s<slot>[f<function>][d<dev_id>] hot plug slot 의 색인번호

x<MAC> mac address

p<bus>s<slot>[f<function>][d<dev_id>] pci dev path

p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>] usb port number chain

 

system z 에서의 naming을 보면…

device typeethernet network interface 일 경우는…

ensccw0.0.1234    ensccw<bus-ID>

device typeSLIPCTC network device인 경우는…

slccw0.0.1234     slccw<bus-ID>

이렇게 만들어진다.

 

VLAN interface naming scheme

VLAN + VLAN ID

: vlan0005

VLAN + 패딩 없는 VALN ID

: vlan5

device name + VLAN ID

: eth0.0005

device name + 패딩 없는 VLAN ID

: eth0.5

biosdevname 을 사용한 일관성 있는 network device naming

# yum install -y biosdevname commnad 를 실행하여 biosdevname install 하고, boot command line에 ‘biosdevname=1이라고 지정해 줍니다. 무효로 하려면 0 을 지정하면 된다. Boot command line이란 grub.cfg file 내에서 booting option을 바꿔주라는 뜻.

Onboard network interface (Lan On Motherboard LOM 이라고도 함.) eth0123… → em1234…

pci card network interface eth0123… → p<slot>p<ethernet port> : p3p4

가상기능 eth0123… → p<slot>p<ethernet port>_<virtual interface> : p3p4_1

RHEL 7 network guide 참조함

kvm 에서 vm template 만들기

문득 kvm에서 template를 만들어 쓸 순 없을까 라는 생각을 했다.

Disk 용량도 부족한데 … 1개의 가상머신에 10GB 되는 용량을 매번 부여하기가 힘들었다.

그래서 찾아봤는데 lvm thin provisioning 을 이용해서 tempate을 만드는게 잇더라.

정확히 말하면 lvm을 이용해서 template를 만드는게 있었는데 난 거기다 thin volume을 만들어서 좀더 용량을 아끼고 싶엇다. (회사에서 노트북 사줫는데 storage 용량이 198GB임… ; 그래도 memory 32GB랑 기능이 많아서 대 만족중 ㅎㅎ)

내가 참조한 site는 여기 !! https://dnaeon.github.io/creating-a-template-for-kvm-virtual-machines/

일단 나는 lvm thin provisioning volume을 만들어서 template(만든다음 그냥 안쓰기 ㅋ) 한 다음, 이걸 snapshot 을 이용해서 volume을 만들고 이걸 이용해서 kvm virtual machine 을 만든다.

시작!

먼저 lvm 을 이용해서 thin volume 을 만들자.

root@youngjulee-ThinkPad-S2:~# lvcreate –thinpool youngju-group/vms_thinpool -L 40G

### youngju-group 이라는 vgs(volume group) vms_thinpool 이라는 logical volume을 만드는데 이걸 thin volumepool로 쓴다. ###

root@youngjulee-ThinkPad-S2:~# lvcreate -V20G -T youngju-group/vms_thinpool -n rhgs_template

### vms_thinpool 에서 rhgs_template 라는 logical volume을 만드는데 size20G로 한다. -V 옵션은 가상 size를 정하는 옵션으로 실제로 쓴 용량만큼만 할당 하는데 20G 까지 쓸 수 있다는 뜻이다. ###

virt-install script 를 만들엇다.

root@youngjulee-ThinkPad-S2:~# cat virt-install.sh

#!/bin/bash

VMNAME=$1

VMVOLUEM=$2

VMISO=$3

virt-install –connect qemu:///system \ ### localhost qemu hypervisor 에 접속

–name $VMNAME \ ### virtual mathine name

–memory 4096 \ ### memory

–vcpus 2 \ ### cpus

–disk path=/dev/youngju-group/$VMVOLUEM \ ### template 으로 사용할 logical volumepath

–network network=youngju-thinkpad \ ### 사용할 network 기본으로 default

–virt-type kvm \ ### virtual machine type kvm 으로 함.

–os-variant auto \ ### os 종류 인데 fedora 등등 하고 싶은거 하면되는데 auto로 하면 iso이미지 보고 지가 알아서 해줌 별로 중요한건 아니다.

–graphics vnc \ ### console type

–hvm \ ### hardware virtual machine 으로 hardware의 도움을 받아 가상머신을 만들겟다는뜻. 그러니까 full virtualization type으로 만들겟다. Para virtualization hardware의 도움 필요없이 virthal mathine 만들기가 가능한데 os에다가 vmm(virtual machine monitor)기능을 하는 코드를 심어 줘야 한다고 알고잇음.

–cdrom /home/youngjulee/iso/$VMISO ### install cdrom path

### $1 $2 $3 은 이 script를 실행 했을때 위치매개변수를 지정한다. 쉽게말해 virt-install.sh rhgs_template rhgs_template_volume rhgs-3.1-u2-rhel-7-x86_64-dvd-2.iso 이렇게 3 개의 위치 argument 가 들어가면 명령어는 $0 순서대로 $1rhgs_template (이름) $2 rhgs_template_voluem (logical volume name) $3 rhgs-3.1-u2-rhel-7-x86_64-dvd-2.iso (설치할 iso 이미지) 이렇게 되어 있다. ###

root@youngjulee-ThinkPad-S2:~# ./virt-install.sh rhgs_template rhgs_template rhgs-3.1-u2-rhel-7-x86_64-dvd-2.iso

os install 이 끝나고 나면, system 에서 쓸 tool들을 설치하고 나서 # sys-unconfig 를 한다.

root@youngjulee-ThinkPad-S2:~# sys-unconfig

### windows sysprep 같은건데 system uuid 나 이런것들을 삭제시켜 준다. 재 부팅 시 다시 만들어줌. ###

root@youngjulee-ThinkPad-S2:~# lvcreate -s -T youngju-group/rhgs_template -n rhgs1

### rhgs_template volumesnapshot을 뜬다. -T 옵션은 snapshot을 뜰 thin volume을 지정해준다. -s 옵션은 snapshot을 뜨겟단 뜻 ###

root@youngjulee-ThinkPad-S2:~# lvchange -kn youngju-group/rhgs_template

### 중요한건데 snapshot volume은 만들어지면 defaultactive가 안되게끔 attr 의 마지막 k 가 켜져 있다. 뭔말이냐면 이 마지막의 klvchange –ay 명령어로 activation 할때 skip 하겠다는 뜻이다. 그래서 lvchange -ay activation 할때 -K option을 써서 activation skip을 무시 하고 activation 할건지 아니면 -kn option으로 activation skip option을 없애거나 해야한다. -K option을 하면 재부팅 후 자동으로 activation 되어 있지 않다.

root@youngjulee-ThinkPad-S2:~# lvs -o lv_name,attr,lv_role

LV Attr Role

home -wi-ao—- public

rhceph_template Vwi-a-tz– public

rhgs1 Vwi-a-tz-k public,snapshot,thinsnapshot

### 위의 k 때문에 일반적인 방법으로는 activation 이 안된다. 위에 기술된 내용으로 activation 시키자. ###

root@youngjulee-ThinkPad-S2:~# cat virt-install-template.sh

#!/bin/bash

VMNAME=$1

VMVOLUEM=$2

virt-install –connect qemu:///system \

–name $VMNAME \

–memory 4096 \

–vcpus 2 \

–disk path=/dev/youngju-group/$VMVOLUEM \

–network network=youngju-thinkpad \

–virt-type kvm \

–os-variant auto \

–graphics vnc \

–hvm \

–boot hd ### 요것만 틀림

### 위랑 다 똑같은데 booting hard disk로 한다. 이때 hard disk는 위에서 만든 snapshot volume으로 한다. ###

이렇게 해서 thin volume template 가 되고 snapshot이 가상머신 image 가 되엇다.

Snapshot 을 수십개 떠서 돌려도 실제로 차지하는 disk 용량은 template 용량 + 가상머신들이 부팅 후 실제 사용한 용량“ 이 된다. 내경우 8install 만 하니까 2GB도 안쓰더라.

Ovirt 가 이런식으로 가상머신 image 관리 하는것 같음.

linux 에서 smb mount 하기

Linux 에서 samba mount 하기…

별것도 아닌것에 꽤 고생햇네…

windows 에서는 explorer 주소창에 ‘\\<server name>’ 치면 바로 username , password 입력창이 나오고 접속이 되지만 linux에서는 그렇지가 않더라…

mount -t cifs -o username=<username>,password=<password> //ipaddress.or.fqdn/Samba /mnt/nas

이렇게 나와잇는데 {service name} 에다가 samba service를 해주고 있는 target을 지정해주는데 꼭 다음 directory 까지 지정해주거나 지정된 service name을 지정해줘야 한다. Service namelinux에서 samba service 해줄때 생성하는데 windows에서는 잘 모르겟다.

암턴 저 위에 //ipaddress.or.fqdn serverip가 되거나 fqdn(fully qualified domain name) 이 들어가야 하며 뒤에 /Samba 는 해당 디렉토리 명이 되겟다. 그 뒤의 /mnt/nas는 내 servermount point 이다.