목적 : Original VG lvcb가 존재하는 lv => BIG VG lvcb가 없는 lv dd copy 수행

 

 

첫번째 쉘입니다.

 

#cat dd_raw_device_1.sh                                            

timex dd if=/dev/rsystem01 of=/dev/rsystem01_new bs=4k skip=1 count=255                                                

 

아래 그림에서 보듯이

 

1번의 4k lvcb정보(512byte)가 들어가 있습니다.  (오라클에서는 raw device 사용시 4k(4096byte) 부분을 사용하지 않습니다.)

 

  

 

그러하여 bs=4k 단위로 준 겁니다.(이 경우 bs=ibs=obs 가 동일하게 적용됩니다. 즉 읽는 크기와 쓰는 크기가 동일함.)

 

skip=1 "1번의 4k" 부분에 lvcb 정보가 있으므로 , 이 정보를 copy 하지 않기 위함입니다.

(신규 LV zero-offset이 적용된 LV.  "DEVICESUBTYPE : DS_LVZ" 으로 확인)

 

"count = 255" bs=4k 단위로 255개를 copy 합니다.( 4K * 255 = 1020k copy )

 

따라서 첫번째 쉘의 결과는 lvcb를 복제하지 않고 1020k 만큼  새로운 lv에 복제를 합니다.

 

 

두번째 쉘입니다.

 

#cat dd_raw_device_2.sh

timex dd if=/dev/rsystem01 of=/dev/rsystem01_new ibs=1024k obs=1020k skip=1 seek=1

 

 

  

여기서는 옵션에서 읽기(ibs=1024k)와 쓰기(obs=1020k) 부분의 사이즈가 다릅니다.

 

ibs=1024k 만큼 read하여,  obs=1020k 만큼씩  write 합니다.

 

왜냐면, 첫번째 쉘에서 이미 신규 LV 1020k 만큼을 copy 하였기 때문입니다.

 

그러하여 1020k 단위로 write가 수행됩니다.

 

skip=1 , 1024k 단위로 두번째 블록을 읽습니다. (원본 LV를 읽을때이므로 lvcb가 포함된 1024k입니다.)

 

seek = 1은 신규LV 1020k 단위가 이미 복제되었으므로, 1020k 단위로 두번째 블록에다 write 합니다.

 

(단위를 변경하고자 한다면 첫번째 쉘에서 count 를 원하는 사이즈 만큼 증가시키고, 두번째 쉘에서 증가시킨만큼  write하면됩니다.)

 

: 10M 단위로 dd copy를 하고자 한다면

첫번째 쉘

count = 2550

두번째 쉘

ibs=10240k , obs=10200k

 

 

Note :  read 1024K씩 읽는데 write 1020K씩 하므로 계속  4K  남게 되는데, 이것은 다음 read write시 먼저 Write.

그래서 obs count ibs count 보다 큰 이유가 위와 같은 사유임. 

 

 

 

[옵션설명]

bs = bytes  : 한번에 지정된 단위로 read/write한다. (,ibs,obs 무시됨.)

ibs = bytes : 한번에 지정된 단위로 read한다.

obs = bytes : 한번에 지정된 단위로 write한다.

skip = blocks : 입력 시작에서 blocks 단위만큼 ibs 크기를 건너뛴다.

 ( 가령 skip=5 , ibs=10이면 50byte를 건너뛰어 read를 한다.)

seek = blocks : 출력 시작에서 blocks 단위만큼 obs 크기를 건너뛴다.

count = blocks : 복사할 회수 또는 블록의 개수 ( 생략시 모든 데이터 복사)