문제

디렉토리를 보관하고 있습니다. 이 디렉토리에는 다른 프로세스에서 작성된 파일이 있습니다. linux tar/perl tar 모듈을 사용하여 이것을 tar에있을 때, 아카이브에는 파일의 항목이 있지만 내용은 null입니다.

파일이 타격하기 전에 ...

-rw-r--r--  1 irraju dba 28 Feb 18 02:22 a
-rw-r--r--  1 irraju dba 25 Feb 18 02:23 b
-rw-r--r--  1 irraju dba 29 Feb 18 03:38 c

Untarring 후

-rw-r--r-- irraju/dba       28 2009-02-18 02:22:58 a
-rw-r--r-- irraju/dba       25 2009-02-18 02:23:17 b
-rw-r--r-- irraju/dba        0 2009-02-18 03:33:12 c

이 문제를 해결하려면 어떻게해야합니까? 파일이 아카이브에 아카이브에있는 순간에 아카이브에있는 것을 원합니다. 이 파일은 로그 파일 일 수 있으며 Tarring 전에 파일 핸들을 닫을 수 없다고 가정합니다.

도움이 되었습니까?

해결책

"Linux"로 질문에 태그를 지정하면 LVM 파티션을 사용하는 기회가 있습니다. 실제로 LVM 파티션에서 실행중인 경우 LVM 스냅 샷 기능을 사용할 수 있습니다.

다음은 관련성에 대한 링크입니다 작업 수행 방법에 대한 LVM 문서.

여기에 일부가 있습니다 LVM 스냅 샷 소개:

LVM이 제공하는 훌륭한 시설은 '스냅 샷'입니다. 이를 통해 관리자는 어느 시점에서 얼어 붙은 논리 볼륨의 정확한 사본을 제공하는 새 블록 장치를 만들 수 있습니다. 일반적으로 이것은 일부 배치 처리 (예 : 백업)를 논리 볼륨에서 수행해야하지만 데이터를 변경하는 라이브 시스템을 중단하고 싶지는 않습니다. 스냅 샷 장치가 완료되면 시스템 관리자는 장치를 제거 할 수 있습니다. 이 시설은 논리 볼륨의 데이터가 일관된 상태에있을 때 스냅 샷을 만들어야합니다. 2.6 커널의 파일 시스템은 패치없이 스냅 샷을 만들 때 자동으로 수행합니다.

다른 팁

먼저 파일을 복사 해보세요 ...

cp a a.tmp
cp b b.tmp
cp c c.tmp

... 그런 다음 모든 것을 함께 Tarball ...

tar *.tmp abc.tar

... 그리고 정리 :

rm *.tmp

그래도 작동하지 않으면 파일 핸들을 보유한 프로세스는 읽기 액세스를 공유하고 싶지 않습니다 ...

사용 된 파일 시스템과 파일에 액세스하는 응용 프로그램에 따라 다를 수 있습니다. 일반적인 솔루션에 가장 가까운 것은 스냅 샷을 지원하는 파일 시스템을 사용하고 TAR를 실행하기 전에 스냅 샷을 만드는 것입니다.

두 번째 출력이 이루어집니다 ~ 후에 당신의 첫 번째, 그것은 옳을 수 없습니다. 나는 그것을 추측하고있다 tar 바로 여기에 있습니다 : 작업을 수행 할 때 파일이 비어있었습니다. 여기서 인종 조건을 다룰 수 있습니다.

다른 사람들이 말했듯이, 그것은 파일 시스템과 OS를 사용하는 것에 달려 있습니다. sync 먼저 (또는 파일 시스템에 해당하는 것) 파일을 임시 디렉토리에 복사 한 다음 TAR UP. 파일 시스템에서 열린 파일을 복사 할 수 없으면 SOL입니다. PERL은 파일 시스템 제한을 극복 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top