| [ 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 ^^^^ |