CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): belami (__커피__)
날 짜 (Date): 2002년 5월  3일 금요일 오전 10시 21분 35초
제 목(Title): Re: /dev 파일 카피중 "No space left on d


그거 sparse(NULL로 가득 찬) 파일이 있는지 보세요.
sparse 파일을 복사하면 원래 크기의 몇십배까지 뻥튀기 됩니다.
sparse 파일은 내용이 NULL로 가득찬 파일을 말하는데요.
만들어질 때 그 안에 내용이 쓰여지지 않은 채
seek를 통해 건너뛰어진 부분이 많은 파일입니다.

파일을 write 모드로 열고 fseek(1000000)한 후 
1바이트를 쓰면 파일 크기 1000001 바이트짜리 파일이 생기지만
실제로 디스크에는 별 블럭 안되는 파일이 생기죠.
그 중간은 내용이 없다는 것을 UNIX 커널이 알기 때문에
블럭을 할당하지 않는 나름대로 똑똑한 방식입니다.

그렇게 만들어진 sparse 파일을 복사하면 반드시 원래 크기를 회복합니다.
왜냐하면 복사하는 프로그램들은 그 중간 부분이 디스크를
점유했는지 안 했었는지 알 바 없이 ... 그냥
read() 콜이 돌려주는 데이터를 읽어서 타겟에 쓰니까요.
읽은 데이터는 대부분 아스키 0번 문자입니다.

sparse 파일은 ls -ls 하시면 첫 컬럼과 파일 크기 컬럼을
비교해보시면 찾을 수 있습니다.

샘플:

% dd if=/dev/null of=out1 seek=1000000 bs=1
% cp out1 out2
% ls -ls out1 out2
  32 -rw-r--r--   1 belami     users    1000000  5월  3일  10:46 out1
1984 -rw-r--r--   1 belami     users    1000000  5월  3일  10:47 out2
^^^^

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.