저는 현재 NCBI Blast 데이터베이스를 BLASTDB 형식에서 FASTA 형식으로 변환하는 스크립트를 호출하는 프로그램을 개발 중입니다. 스크립트는 일반적으로 압축되지 않은 BLASTDB 데이터베이스의 디렉터리에서 실행될 것으로 예상하고 -db 옵션을 사용하여 변환해야 하는 데이터베이스를 지정합니다(이름은 같지만 끝이 다른 여러 파일로 구성됨).
서버의 저장 공간이 매우 제한되어 있기 때문에 데이터베이스를 압축된 아카이브에 저장하고 싶습니다. 그래서 제 질문은: 해당 아카이브에서 스크립트를 사용할 수 있는 방법이 있습니까, 아니면 가능합니까(아마도 bash 리디렉션을 통해?) 압축되지 않은 아카이브를 이 스크립트로 직접 스트리밍하시겠습니까?
미리 감사드립니다 :)
답변1
다음 명령을 사용하여 아카이브를 마운트할 수 있습니다퓨즈 아카이브:
mkdir /mnt/some-directory
fuse-archive your-archive.tar.gz /mnt/some-directory
그러나 아카이브 내용을 SquashFS 파일로 다시 패키지할 수 있으며 tar와 달리 SquashFS는 무작위 액세스용으로 설계된 압축 파일 시스템이기 때문에 아마도 더 나은 성능을 얻을 수 있습니다. 사용tar2sqfs
도구재포장:
zcat your-archive.tar.gz | tar2sqfs -c xz -b 1048576 mountable-archive.squashfs
그런 다음 루트로 다음을 수행합니다.
mount -t squashfs mountable-archive.squashfs /mnt/some-directory
또는 일반 사용자로서 다음을 사용하십시오.퓨즈를 짜내다:
squashfuse mountable-archive.squashfs /mnt/some-directory
루트로 설치된 SquashFS는 세 가지 방법 모두에서 최고의 성능을 제공합니다.
설치된 디렉토리에서 /mnt/some-directory
아카이브의 내용을 찾을 수 있으며 모든 스크립트를 실행할 수 있습니다. 하지만 이렇게 될 것이라는 점을 참고하세요.읽기 전용목차. 이 디렉터리에 써야 하는 경우(예: 파일 생성 또는 업데이트) 다음을 사용하여 overlayfs
(또는 다른 오버레이 설치 프로그램 aufs
) 다음을 추가해야 합니다 .
mkdir /mnt/upper
mkdir /mnt/work
mkdir /mnt/readwrite-directory
mount -t overlay -o upperdir=/mnt/upperdir,lowerdir=/mnt/some-directory,workdir=/mnt/work mountable-archive-rw /mnt/readwrite-directory
그런 다음 이 범위 내에서 작업하십시오 /mnt/readwrite-directory
. 이는 아카이브의 모든 개체로 채워지지만 읽기-쓰기입니다. 모든 새 파일이나 업데이트는 이전 단계의 읽기 전용 squashfs 또는 퓨즈 아카이브 마운트 지점 에/mnt/upper
기록됩니다./mnt/some-directory
답변2
아니요.관련된 문서구체적으로 정의됨:
다운로드한 압축 파일은 gzip이나 기타 압축 해제 도구를 사용하여 확장해야 합니다. 그런 다음 Unix/Linux 또는 WinZip의 tar 유틸리티와 Windows 및 Macintosh 플랫폼의 StuffIt Expander를 사용하여 결과 tar 파일에서 BLAST 데이터베이스 파일을 추출할 수 있습니다.
이것이 실제로 스크립트라면 다음을 사용하여 무시할 수 있습니다.프로세스 교체쉘이 이를 지원하는 경우:
command <(zcat file.gz)
이렇게 하면 압축 해제와 같은 command
처리가 가능해집니다. file.gz
불행하게도 데이터베이스를 사용하는 것은 스크립트가 아니라 폭발 실행 파일이며 압축이 풀릴 것으로 예상하며 데이터베이스 파일을 매개 변수로 전달하지 않기 때문에 이를 해결할 수 없습니다.
즉 말하자면,Nikita Kiprianov의 조언sqshfs의 중요성은 매우 중요합니다!