파일 시작 부분에 콘텐츠를 추가하면 모든 데이터 블록이 업데이트되나요?

파일 시작 부분에 콘텐츠를 추가하면 모든 데이터 블록이 업데이트되나요?

UFS(Unix File System)에서 파일은 직접 또는 간접 블록을 참조하는 15개의 포인터가 있는 inode 구조로 표시됩니다.

아래 이미지를 예로 들어 보겠습니다.

인덱스 노드 구조

Data오른쪽에 표시된 각 블록에는 실제 파일 데이터가 포함되어 있습니다. 크기는 data block일반적으로 4096이며 파일 시스템이 생성될 때 결정됩니다.

40MB의 대용량 파일의 경우 거의 1K 데이터 블록을 차지합니다. 이 경우 파일에 데이터를 추가하면 마지막 블록에만 영향을 미치거나 마지막 데이터 블록에 공간이 없으면 새 데이터 블록이 생성된다는 것을 알았습니다.

그러나 파일 시작 부분(약 200바이트)에 일부 데이터를 추가하면 아래 데이터 블록에 계단식 영향을 미치고 각 데이터 블록의 마지막 200바이트가 다음 블록으로 이동(또는 푸시)됩니다. 한 조각?

마찬가지로 첫 번째 데이터 블록의 처음 200바이트를 삭제하면 하위 데이터 블록에 계단식 효과가 있습니까?

아니면 일반적으로 UFS나 파일 시스템에는 각 데이터 블록에 대해 일부 버퍼 공간을 예약하여 이 상황을 처리하는 효율적인 방법이 있습니까?

미리 감사드립니다.

답변1

대부분의 파일 시스템은 파일 시작 부분에 데이터 삽입을 지원하지 않으며 Unix에는 해당 API가 없습니다. 대부분의 운영 체제에서 파일을 수정하는 유일한 방법은 세그먼트를 덮어쓰거나(예: aaaaaaaaaa로 변경 aaabbbaaaa), 데이터를 끝에 추가하거나(예: aaaaaaaaaa로 변경 aaaaaaaaaacccc), 파일을 자르는 것(예: aaaaaaaaaa로 변경 aaaaa)입니다.

파일 시작 부분에 데이터를 추가하려면 추가된 데이터로 새 파일을 만들고 이전 파일의 내용을 복사하세요.

이는 원래 Unix와 대부분의(전부는 아니지만) 최신 Unix(그리고 일반적으로 대부분의 운영 체제)에 해당됩니다.

관련 정보