저널 파일 시스템. 게으른 쓰기 및 로깅 체크포인트. 신뢰성 가정

~에 정상적인 일파일 시스템의 경우 모든 변경 사항은 일반적으로 즉시 디스크(또는 OS의 디스크 캐시에 적용되지만 이 컨텍스트에서는 중요하지 않음)에 적용됩니다.


많은 작업에서는 한 번에 여러 파일 시스템 구조를 동시에 수정해야 합니다( 메타데이터. 간단한 예: 하드링크를 생성할 때 inode 링크 수를 늘리는 동시에 링크가 생성된 디렉터리의 내용을 변경해야 합니다. 이러한 작업 중 하나만 수행할 수는 없습니다. 파일 시스템의 내용은 다음과 같습니다. 잘못된.


일반적인 파일 시스템 작업에서는 파일 시스템 구현 코드에 다음이 포함되지 않는 한 이러한 복잡한 작업이 항상 전체적으로 수행됩니다. 심각한 오류. 그러나 비정상적인 재부팅이나 하드웨어 오류이 상황은 매우 현실적이다.


재부팅 후에는 어떤 작업이 수행되었는지, 무엇이 불완전했는지 알 수 없고 디스크가 올바르게 마운트 해제되지 않았다는 것(소위 더티 플래그가 재설정됨)만 알 수 있으므로 전체 파일 시스템을 분석해야 합니다. 디스크이므로 파일 시스템의 모든 오류를 식별하고 수정합니다. 당연히 이 작업을 자동으로 수행하는 것이 항상 가능하지는 않습니다(부자연스러운 지능, 아쉽게도 아직 아무도 투시 능력을 가르칠 수 없었음). 따라서 비정상적인 재부팅 후 동일한 fsck.ext2에 수동 개입이 필요할 수 있습니다.


100-200G의 파티션에서 fsck를 실행한 사람들(요즘에는 드문 일이 아닙니다)에는 이것이 거의 즐거움이 없다는 것을 잘 알고 있습니다. 멀티 테라바이트 어레이의 관리자는 fsck라는 단어에 "실수로" 머리를 찢을 수 있는 추가 분의 가동 중지 시간 동안 발레리안을 잡거나 그러한 단어로 맹세하지 말라고 요청할 수 있습니다.


이 문제를 해결하기 위해 오래 전에 기발한 아이디어가 고안되었습니다. (언제 누구인지 아시는 분 계시면 알려주세요.) 처음에는계획된 작업에 대한 설명을 디스크에 쓴 다음 실행하십시오. 그러면 전체 디스크의 정확성을 테스트하는 것이 아니라 로그 내용만 볼 수 있으며 작업이 완료되지 않은 경우 롤백할 수 있습니다. 이를 위해 fsck를 실행할 필요는 없습니다. 파일 시스템 드라이버 자체가 이를 수행합니다.


요약하자면, 저널링 파일 시스템이 할 수 있고 해야 하는 유일한 일은 fsck 시간을 절약하는 것입니다. 따라서 파일 시스템 메타데이터의 일관성은 그 이상도 그 이하도 아닙니다.


이 즐거움의 대가는 최대 부하, 즉 초당 I/O 작업 수로 측정되는 최대 성능을 설명하는 작은(보통 수십 메가바이트로 측정) 디스크 영역을 가지고 있다는 것입니다. 그리고 물론 약간의 시간이 걸립니다. 디스크 공간디스크 가격 시대에< 1$/гигабайт никого не волнует.

데이터 로깅

아시다시피 메타데이터를 사용한 작업은 일반적으로 로그에 기록됩니다. 그러나 데이터에도 동일한 작업을 수행할 수 있습니다.


내가 아는 한, Linux에서는 ext3만이 data=journal 매개변수를 사용하여 데이터 저널링을 수행할 수 있습니다.


물론, 많은 경우 데이터 로깅은 성능을 다소 저하시킵니다(그러나 전부는 아니지만 IBM 웹사이트에 테스트 결과가 있는데, 이에 따르면 데이터베이스가 있는 파일 시스템에 대한 데이터 로깅을 사용하면 성능이 향상될 수도 있습니다).


이 도구는 또한 데이터의 안전을 보장하지 않습니다. 개인적인 경험 data=journal과 함께 ext3을 사용하는 것이 가장 안정적인 파일 시스템입니다.

성능

세심한 독자라면 저널을 사용하면 디스크에 고르지 않은 로드가 생성된다는 점을 알아차렸을 것입니다. 하나의 작은(파일 시스템의 전체 크기에 비해) 영역이 불균형한 양의 작업을 차지합니다.


매우 흥미로운 두 가지 솔루션이 있습니다.
먼저 로그를 다음으로 가져갈 수 있습니다. 별도의 디스크(대부분의 파일 시스템에서 이를 허용함) 결과적으로 디스크 하나만 추가하면 성능이 효과적으로 두 배가 됩니다. 이렇게 간단하고 저렴한 방법으로 대규모 RAID 어레이의 성능을 향상시키면 특히 멋져 보입니다.


둘째, 특별한 카드를 사용할 수 있습니다 비 휘발성 기억 장치(예를 들어, 아쉽게도 러시아에서 판매되는 것을 본 적이 없는 UMEM) 이는 기존 디스크보다 눈에 띄게 빠르지만 메모리 크기는 작습니다.


아직 시도하지 않은 완전히 사치스러운 솔루션도 있습니다. 즉, 메모리에 있는 블록 장치에 저널을 만드는 것입니다. 물론 재부팅 후 이러한 파일 시스템을 다시 생성해야 하지만 임시 데이터의 경우 이는 흥미롭고 눈에 띄는 성능 향상을 제공할 수 있습니다. 특히 메타데이터뿐만 아니라 데이터를 로깅할 때 더욱 그렇습니다.

트릭

이미 본 것처럼 잡지는 속도를 높일 수도 있습니다. 저널링 파일 시스템이 성능을 더욱 향상시키기 위해 사용할 수 있는 몇 가지 독창적인 트릭이 있습니다.

  • 파일 생성 지연(파일 생성 시 디렉터리에 항목을 즉시 생성하지 말고 일정 기간 동안 로그에만 보관하세요. 파일은 임시 파일일 수 있으며 즉시 삭제됩니다.)
  • 지연된 파일 할당(적어도 하나의 블록을 써야 할 때까지 파일의 첫 번째 블록에도 물리적으로 공간을 할당하지 않음), 사용자가 먼저 파일 크기를 변경한 다음 데이터 쓰기를 시작할 가능성이 높습니다. 결과적으로 조각화가 줄어듭니다(프로그램이 이 트릭을 사용하는 경우).

이것들은 가장 간단하며 저널 파일 시스템이 일반 파일 시스템보다 더 빠르게 작동하면서도 더 안정적으로 작동할 수 있도록 하는 더 많은 작은 트릭이 있습니다.

결함

내가 말했듯이 로그는 만병 통치약이 아니며 데이터가 전혀 저장되지 않습니다. 그러나 많은 경우 저널 파일 시스템을 사용하면 보안에 대한 잘못된 인식이 형성됩니다. 결국 재설정을 통해 시스템을 재부팅할 수 있고 부팅 시에도 작동하지 않을 수 있다는 것입니다!


네, 흔들리지 않습니다. 그리고 일부 fsck 파일 시스템의 관점에서 보면 이는 절대적으로 정확합니다. 동시에 데이터에서 여기에만 덩어리 만 남을 수 있습니다.


그러한 상황에서 reiserfs가 수정된 파일(파일에 할당된 블록에 있던 임의의 데이터)에 쓰레기를 남길 수 있다고 가정해 보겠습니다. 이는 실제로 우발적인 정보 유출 가능성이 매우 높다는 것을 의미합니다.


XFS는 더 정확하게 작동합니다. 이러한 블록은 0으로 규정됩니다. 이는 종종 사용자에게 충격을 줍니다. 특히 0으로 규정하지 않는 reiserfs의 팬입니다.


결과적으로 reiserfs는 오히려 구하다수정을 통해 XFS는 파일의 쓰레기와 데이터 누출을 방지하기 위해 최선을 다할 것입니다. 전략이 약간 다를 뿐입니다. 결과는 동일합니다. 데이터가 손실될 수 있으며 사용자는 이에 대해 알지도 못할 것입니다. 1년 동안 아무도 손대지 않은 파일(아카이브에 있음)을 발견하고 갑자기 쓰레기나 0으로 막힌 것으로 판명될 때까지.


데이터 로깅이 활성화된 ext3에는 이러한 기능이 적용되지 않습니다. 그러나 성능이 눈에 띄게 저하됩니다.


좋은 의미에서는 UPS를 구입하는 것만으로도 이러한 모든 문제를 피할 수 있고 방지해야 하며, 저널링은 추가 수준의 신뢰성과 생산성 향상 수단으로 더 잘 사용됩니다.

결과

저널링 파일 시스템은 관리를 좀 더 쉽게 만들어 줄 뿐이지만 비정상적인 재부팅 시 데이터 손실을 막아주는 마법의 총알은 아닙니다. 따라서 UPS를 사용하지 않고 백업도 하지 않으면 조만간 귀하의 데이터가 구리 대야로 덮이게 될 것입니다. 이는 진심으로 바라지 않는 일입니다. 원하는 경우 저널링 파일 시스템을 성능 향상 수단으로 사용할 수 있습니다.


UPS 및 백업을 구입한 사람은 토고 데이터를 항상 그대로 유지합니다.


(C) 데니스 스미르노프 2004년 11월 5일
이 문서를 다른 인터넷 리소스 및 기타 인터넷 리소스에 배치 인쇄 출판물허용되지 않습니다.

NTFS 저널링

NTFS는 사용자 데이터가 아닌 논리 구조의 저널링을 사용합니다. 따라서 데이터의 안전성은 보장되지 않지만 시스템 자체의 올바른 상태는 유지됩니다. NTFS가 파일 데이터를 저널링하지 않는다는 사실은 실제로 데이터 손실의 한 가지 변형으로 이어집니다. 3MB를 쓰는 동일한 가상의 경우 쓰기 프로세스에 오류가 발생하면 어느 부분이 어느 부분인지 확인할 수 없습니다. 데이터가 기록되었으며 변경되지 않았습니다. 그럼에도 불구하고 시스템에 의해 기록되는 작업은 시스템 자체의 구조, 즉 파일 및 디렉터리에 대한 작업입니다(파일 추가, 이름 바꾸기, 이동, 생성 및 삭제(여유 공간 확보)). 조각 모음 작업, 즉 파일 조각의 이동도 기록됩니다. 한마디로 모든 것은 논리 연산일지.

글쓰기가 늦어지고 검문소저널링

어떤 것으로 알려져 있습니다 현대 시스템파일 작업 속도를 높이기 위해 쓰기 작업 캐싱을 포함하여 캐싱을 사용해야 합니다. 소위 지연 쓰기(lazy write)는 캐싱의 원리로, 디스크에 쓰기 위해 의도된 데이터가 일정 시간 동안 캐시에 저장되고 다른 활동이 없는 자유 시간에만 물리적으로 저장됩니다. 지연 쓰기는 디스크 작업의 효율성을 크게 증가시킵니다. 이러한 캐싱은 많은 작업을 하나로 그룹화하기 때문입니다. 이는 쓰기가 디스크의 작은 영역에 수행되는 경우 특히 효과적입니다. 지연 쓰기의 또 다른 이점은 더 필요한 읽기를 방해하지 않고 시스템이 비어 있고 다른 목적으로 디스크에 액세스할 필요가 없을 때만 쓰기라는 것입니다. 지연된 글쓰기와 저널링을 조화시키는 방법은 무엇입니까? 예쁘다 복잡한 문제, 쓰기를 연기하면 물리적 쓰기 대기열에 있었고 오류가 발생하기 전에 디스크에 쓸 시간이 없었던 데이터가 손실될 수 있기 때문입니다. 여기서 가장 불쾌한 점은 데이터 손실이 아니라 녹음 시간에 불일치가 있다는 사실입니다. 일부 서비스 영역은 업데이트될 수 있고 일부는 의미와 관련되어 있습니다. 업데이트가 다른 영역에 대해 지연될 수 있기 때문에 아직은 아닙니다. 몇 초 동안 실패로 인해 발생하지 않습니다.

NTFS는 지연 쓰기와 저널링의 의미 있는 통합을 통해 이러한 문제를 해결합니다. 기록된 작업을 시작하려고 하면 파일 삭제 등의 의도가 즉시 로그에 기록됩니다. 이는 지체 없이 발생합니다. 이 단계에서는 게으른 쓰기가 작동하지 않습니다. 이는 피할 수 없는 로깅 존재에 대한 대가입니다. 그러나 다른 모든 작업은 이미 지연 모드에서 진행 중입니다. 즉, 부분적으로 발생하거나 전혀 발생하지 않을 수 있습니다. 작업이 단순 기록과 다소 다른 유일한 지연된 작업은 소위 체크포인트라고 하는 이전 트랜잭션의 성공적인 완료에 대한 로그의 기록입니다. 정기적으로(보통 몇 초마다) 시스템은 보류 중인 모든 작업을 디스크에 완전히 플러시해야 합니다. 이 작업을 수행한 후 로그가 기록됩니다. 가장 간단한 표기법- 이전의 모든 작업이 논리적, 물리적 모든 수준에서 올바르게 수행되었음을 나타내는 체크포인트입니다.

이 작동 모드는 기록과 체크포인트의 도움을 받아 한편으로는 여전히 완전한 보장을 보장합니다. 올바른 작업그러나 반면에 실제로 작업 속도가 전혀 느려지지는 않습니다. 검사점이 완료되고 즉시 고려되며 작업 시작에 대한 로그에 기록하는 것은 인건비 측면에서 데이터 자체를 기록하지 않고 기록하는 것에 해당합니다. 지연된 캐싱. 나중에 수행되는 실제 녹음은 대부분의 경우 작업을 방해하지 않으며 시스템 성능을 저하시키지 않습니다.

이번 리뷰에서는 지난 글에서 피상적으로 고려했거나 아예 없었던 문제들을 자세히 다룰 예정이다. 나는 NT 디스크 시스템이 너무 복잡해서 우리가 그것에 대해 꽤 오랫동안 이야기할 수 있다는 것을 즉시 말하고 싶습니다. 그리고 이 기사에서는 말할 수 있는 모든 것을 설명하지 않을 것입니다. 따라서 이것은 이전 게시물에서 제기된 모든 질문에 대해 조직적이고 자세한 방법으로 답변하려는 시도일 뿐입니다. 4부: NTFS 저널링

NTFS가 저널링 시스템이라는 단순한 사실에 대한 설명은 다른 파일 및 운영 체제의 많은 팬을 진심으로 분노하게 만들었습니다. 나에게 보낸 수많은 이메일에서는 NTFS를 여러 파일이 아닌 준저널링 또는 저널링 없는 시스템으로 언급했습니다. 유닉스 시스템. 또한 복구가 불가능한 치명적인 NTFS 충돌을 가리키는 많은 이메일을 받았습니다. 즉, 데이터가 손실되었습니다. 이 부분에서는 제가 능력과 이해를 최대한 활용하여 저널링과 NTFS 충돌 방지의 철학을 설명하고 치명적인 충돌의 원인을 설명하려고 노력할 것입니다. 나는 접근 방식을 정당화하려고 노력할 것입니다 마이크로 소프트 회사, 모든 작업을 그대로 수행했습니다. 적어도 구현된 기술 솔루션의 이유와 NTFS 개발 팀이 타협해야 했던 이유를 간략하게 설명하겠습니다.

기록된 작업

먼저 정확히 어떤 작업이 기록되는지 이야기하고 싶습니다. 완전한 실행 취소 파일이 롤백이 가능하다는 것은 매우 분명합니다. 모든 것속도의 관점과 상식의 관점 모두에서 작동이 절대 불가능합니다. 예, 이러한 로깅을 사용하면 더 많은 데이터를 복구할 수 있습니다. 예를 들어 파일 중간에 3MB를 덮어쓸 때 먼저 로그에 새 데이터를 저장한 다음 해당 파일의 이전 3MB를 다시 쓸 수 있습니다. 그런 다음 실제 데이터로 작업을 수행합니다. 이러한 접근 방식은 정보의 운명에 대한 완전한 확실성을 보장합니다. 즉, 데이터의 어떤 부분이 이미 디스크에 기록되었는지, 어떤 부분이 업데이트되지 않은 원래 상태인지 항상 이해할 수 있습니다. 속도 측면에서 약간의 오버헤드라는 단 하나의 적당한 단점만 있습니다. 디스크에 3MB를 쓰려면 3배 더 큰 볼륨(9MB)에 대해 다양한 디스크 작업을 수행해야 합니다. 예, 완벽한로깅도 사용되지만 주로 데이터베이스 작업 시 사용됩니다. 데이터의 전체 로깅을 제공하려는 경우 파일 시스템의 기능을 전혀 사용하지 않고 합리적인 조건에서 데이터의 안전을 보장하는 MS SQL 또는 Oracle을 설치할 수 있습니다. 파일 시스템의 전체 저널링을 지지하는 사람들에게 한 가지 대답할 수 있습니다. 쓰기 작업 속도를 3배로 줄이겠다는 결정은 가정용 컴퓨터와 서버 모두에서 의무 사항이 되기에는 너무 대담합니다.

NTFS 개발자의 접근 방식은 근본적으로 달랐습니다. 주요 모토는 "어떤 대가를 치르더라도 신뢰성"이 아니라 "성능의 영속성"이었습니다. 로깅은 쉽습니다 해서는 안 된다파일 시스템을 방해하는 것이었습니다. 첫 번째 논리적 단계는 성능 관점에서 절대 허용할 수 없는 전체 로깅을 폐지하는 것입니다. NTFS는 사용자 데이터가 아닌 논리적 구조의 로깅을 사용합니다. 데이터보장되지는 않지만 시스템 자체의 올바른 상태는 계속 유지됩니다. NTFS가 파일 데이터를 저널링하지 않는다는 사실은 실제로 데이터 손실의 한 가지 변형으로 이어집니다. 3MB를 쓰는 동일한 가상의 경우 쓰기 프로세스에 오류가 발생하면 어느 부분이 어느 부분인지 확인할 수 없습니다. 데이터가 기록되었으며 변경되지 않았습니다. 그럼에도 불구하고 시스템에 의해 기록되는 작업은 시스템 자체의 구조, 즉 파일 및 디렉터리에 대한 작업입니다(파일 추가, 이름 바꾸기, 이동, 생성 및 삭제(여유 공간 확보)). 조각 모음 작업, 즉 파일 조각의 이동도 기록됩니다. 한마디로 모든 것은 두뇌 티저작업이 기록됩니다.

게으른 쓰기 및 로깅 체크포인트

파일 작업 속도를 높이기 위한 최신 시스템은 쓰기 작업 캐싱을 포함하여 캐싱을 강제로 사용해야 하는 것으로 알려져 있습니다. 소위 지연 쓰기(lazy write)는 캐싱의 원리로, 디스크에 기록하려는 데이터가 일정 시간 동안 캐시에 저장되고 다른 활동을 하지 않은 자유 시간에만 물리적으로 저장됩니다. 지연 쓰기는 디스크 작업의 효율성을 크게 증가시킵니다. 이러한 캐싱은 많은 작업을 하나로 그룹화하기 때문입니다. 이는 쓰기가 디스크의 작은 영역에 수행되는 경우 특히 효과적입니다. 지연 쓰기의 또 다른 이점은 더 필요한 읽기를 방해하지 않고 시스템이 비어 있고 다른 목적으로 디스크에 액세스할 필요가 없을 때만 쓰기라는 것입니다. 지연된 글쓰기와 저널링을 조화시키는 방법은 무엇입니까? 쓰기를 연기하면 물리적 쓰기 대기열에 있었고 오류가 발생하기 전에 디스크에 쓸 시간이 없었던 데이터가 손실될 수 있으므로 이것은 까다로운 질문입니다. 여기서 가장 불쾌한 점은 데이터 손실이 아니라 녹음 시간에 불일치가 있다는 사실입니다. 일부 서비스 영역은 업데이트될 수 있고 일부는 의미와 관련되어 있습니다. 업데이트가 다른 영역에 대해 지연될 수 있기 때문에 아직은 아닙니다. 몇 초 동안 실패로 인해 발생하지 않습니다.

NTFS는 지연 쓰기와 저널링의 의미 있는 통합을 통해 이러한 문제를 해결합니다. 기록된 작업을 시작하려고 하면 파일 삭제 등의 의도가 즉시 로그에 기록됩니다. 이는 지체 없이 발생합니다. 이 단계에서는 게으른 쓰기가 작동하지 않습니다. 이는 피할 수 없는 로깅 존재에 대한 대가입니다. 그러나 다른 모든 작업은 이미 지연 모드에서 진행되고 있습니다. 즉, 부분적으로(추가로, 잘못된 순서로) 발생하거나 전혀 발생하지 않을 수 있습니다. 단순 쓰기와 다소 다른 지연된 유일한 작업은 이전 트랜잭션의 성공적인 완료에 대한 로그에 기록하는 것입니다. 체크포인트. 정기적으로(보통 몇 초마다) 시스템은 보류 중인 모든 작업을 디스크에 완전히 플러시해야 합니다. 이 작업을 수행한 후 가장 간단한 항목이 로그(체크포인트)에 기록됩니다. 모두이전 작업은 논리적, 물리적 모든 수준에서 올바르게 수행되었습니다.

기록과 체크포인트를 사용하는 이 작동 모드는 한편으로는 완전히 올바른 로깅 작동을 보장하고 다른 한편으로는 실질적으로 전적으로작업 속도가 느려지지 않습니다. 검사점 설정이 완료되고 즉시 고려되며 작업 시작에 대한 로그에 기록하는 것은 인건비 측면에서 지연 캐싱 없이 데이터 자체를 기록하는 것과 같습니다. 나중에 수행되는 실제 녹음은 대부분의 경우 작업을 방해하지 않으며 시스템 성능을 저하시키지 않습니다.

지연된 로깅 문제: 중복 정보의 개념

위의 모든 이론은 충분히 훌륭하지만, 논의될 몇 가지 사항을 더 고려하지 않으면 매우 불쾌한 결과를 초래할 수 있습니다.

이 경우를 고려하십시오. 파일을 삭제하고 있습니다. 로그에 "파일 N이 지워지고 있습니다."라는 항목이 수신되었습니다. 그런 다음 지연 캐시는 먼저 파일이 차지한 공간이 사용 가능해졌음을 물리적으로 표시한 다음 MFT의 물리적 구조 및 디렉터리에서 파일을 제거하기로 결정했습니다. 디스크가 활성 작업 중이고 다른 파일이 즉시 여유 공간에 기록된다고 가정합니다. 이 시점에서 충돌이 발생합니다. 로드할 때 시스템은 로그를 검사하고 완료되지 않은 작업 "파일 N이 지워지고 있습니다"를 확인합니다. 또는 오히려 위에서 설명한 것처럼 완료되지 않은 작업이 아니라 단순히 작업이며 그 후에는 자동으로 불완전함을 나타내는 체크포인트가 없습니다. . 다음 단계는 "롤백 작업"입니다. 즉, 파일을 복원합니다. 한 가지 불행한 점은 파일이 물리적으로 차지하는 공간에 이미 다른 데이터가 포함되어 있다는 것입니다.

이러한 상황을 방지하기 위해 논리적 로깅으로 자신을 제한하려는 시스템은 "일시적으로 점유된 공간" 원칙을 적용해야 합니다. 객체나 레코드에 의해 해제된 공간은 논리적 구조를 포함한 모든 작업이 물리적으로 완료될 때까지 해제된 것으로 선언되지 않습니다. NTFS의 이 메커니즘은 일시적으로 점유된 공간을 해제하는 일반적인 시간이 약 30초이지만 체크포인트가 더 자주 발생하기 때문에 체크포인트와도 동기화되지 않는 것 같습니다.

이 메커니즘은 파일을 삭제할 때뿐만 아니라 다양한 작업에도 사용됩니다. 로깅 원칙 - 제거되거나 새 위치로 이동된 개체는 해당 "출발"(즉, 참조된 데이터)을 올바르게 롤백할 수 있어야 합니다. 삭제되거나 이동된 개체의 논리적 구조에 따라 일정 기간 동안 예약이 필요합니다. 점유된 장소(디스크/디렉토리). 이는 물리적으로 파괴되지 않은 해제된 영역 자체의 데이터가 파일 정보의 특정 저널 역할을 하는 완전 저널링을 향한 또 다른 NTFS 단계입니다.

글쎄, 모든 것이 너무 훌륭하다고 말할 것입니다. 그런데 왜 NTFS 파티션이 여전히 작동합니까?.. 이제 위 모델이 논리 구조의 완전한 복구 가능성을 제공할 수 있다는 사실로 이어지는 원칙을 설명하려고 노력할 것입니다.

  • 일반 모드의 하드 드라이브는 운영 체제에서 쓰라고 지시한 내용과 위치를 정확히 기록해야 합니다. 이 원리시스템에 신뢰할 수 없는 루프, 프로세서, 메모리 또는 컨트롤러가 있는 경우 위반됩니다. 이것이 NTFS 오류의 가장 일반적인 원인입니다.. 도움이 될 것입니다: 오버클럭되지 않은 프로세서, 비싸다 (고품질)메모리, 좋은 마더보드 및 컨트롤러 디스크 섹션에서 제어 및 오류 복구를 제공하는 UDMA 프로토콜.
  • 사고, 정전 또는 컨트롤러로부터 "재설정" 신호를 받은 경우(갑자기 재부팅하는 경우) 하드 드라이브 마더보드) ~ 해야 하다사고 당시 수행된 경우 현재 물리적 부문의 데이터 기록을 올바르게 완료하십시오. 부문 중간 상태 허용되지 않음. 완전한 정전이 발생한 경우에도 이 작업을 수행할 수 있는 최신 하드 드라이브가 도움이 될 것입니다. 커패시터에 충분한 에너지 버퍼링이 있으며 로직은 녹음 중 정전이 발생할 경우 올바른 동작을 위해 설계되었습니다.
  • 디스크는 "캐시 안 함" 플래그와 함께 전송된 데이터를 즉시 써야 합니다. 사실 많은 최신 디스크나 컨트롤러는 지연 녹화 기능을 제공합니다. NTFS 메타파일은 "한 번에 쓰기" 모드에서 업데이트되며 컨트롤러/디스크는 이 요구 사항을 준수해야 합니다.
  • HDD ~ 해야 하다기록된 데이터를 정확하게 읽었는지 확인합니다. 데이터를 읽을 수 없으면 "오류" 신호가 발행됩니다. 디스크 권리가 없다오류 신호 없이 잘못된 데이터(부분적으로만 잘못된 데이터일 수 있음)를 반환합니다. 모두 현대적이다 하드 디스크섹터의 체크섬을 갖고 이 동작 논리를 엄격하게 따릅니다.

이러한 요구 사항의 정확한 이행 충분히신뢰성을 보장합니다 NTFS 작업. 파일 시스템 구조에는 충돌 후에도 심각한 오류가 포함되지 않습니다. 완전한 안정성이 마지막 체크포인트 이후의 모든 항목에 대한 무조건적인 롤백만 보장할 때 로깅 논리가 완료되지 않은 작업(예: 동일한 파일 삭제)을 완료하려고 시도하기 때문에 일부 사소한 버그가 여전히 나타납니다. 이러한 시도에서 발생하는 작은 불일치는 중복된 보안 정보이며 데이터에 실제 위험을 초래하지 않습니다. 실제로는 사소한 것입니다. 이러한 불일치의 본질은 시스템에 더 이상 필요하지 않은 액세스 모드에 대한 "추가" 데이터가 디스크에 있다는 사실에 가장 흔히 있습니다. 이를 정리하는 것은 조각 모음과 같은 순전히 성능 향상의 문제이므로 해당 존재는 실제로 버그가 아닙니다. 심각하고 실제적인 문제가 감지되는 경우 드라이버 자체는 "더티" 볼륨 플래그를 설정하여 다음에 마운트할 때 시스템에 볼륨을 확인하도록 지시합니다.

치명적인 NTFS 오류의 대부분은 이러한 기본 요구 사항을 충족하지 않는 하드웨어로 인해 발생한다는 사실을 유감스럽게 생각합니다. 예, 절대적인 신뢰성은 존재하지 않는다는 것을 이해합니다. 그러나 Microsoft는 분업의 길을 택했습니다. 회사는 장비의 신뢰성에 대해 책임을 지지 않습니다. 내 컴퓨터는 Windows 2000 호환 하드웨어 목록에서 70% 할인되었으며, 이는 거의 모든 경우에 동일하다고 말할 수 있습니다. 실제 자동차구소련의 넓은 지역에서 운영되었습니다. 이는 특히 컴퓨터 오버클럭을 좋아하는 사람들에게 해당됩니다. 한 번만 기억하십시오. 프로세서가 333이고 415로 오버클럭된 경우 작동 첫해에 NTFS를 망칠 가능성이 매우 높습니다. 그리고 한 번 이상... 죄송하지만 실제로 그렇습니다. 어떤 실패에서도 옳은 NTFS는 컴퓨터를 보호하지만 부팅 섹터(사본은 파티션 맨 끝에 저장됨)에 임의의 데이터를 쓰지 못하게 하고 MFT에서는 시스템이 단순히 보험에 가입하지 않음. 죄송합니다. 5부. 소프트웨어 RAID

앞에서 언급한 것처럼 NTFS 저널링은 사용자 정보 손실로 인한 오류가 결코 보장되지 않습니다. 한편 NT는 합리적인 조건 하에서 모든 것이 절대적으로 보장되는 시스템을 만들기 위한 여러 옵션을 제공합니다. 안정성을 높이지 않고 더 많은 수의 디스크를 사용할 수도 있지만 반대로 속도 증가- 또는 동시에 둘 다. 이러한 구성에 대해서는 기사의 이 부분에서 설명합니다.

RAID(Redundant Array of Inexpensive Disks)는 저렴한 디스크의 중복 배열입니다. 단일 드라이브에서는 사용할 수 없는 안정성이나 속도 특성을 제공하기 위해 동시에 여러 디스크 드라이브를 사용하는 기술입니다.

Windows NT는 소프트웨어 레벨 3에서 지원합니다. RAID 레벨(소위 디스크 어레이 작동 전략), 그 간략한 특성이 다음 표에 요약되어 있습니다.

기존 하드 드라이브와 비교한 속도 신뢰할 수 있음 총 디스크 공간
RAID 0
병렬 드라이브
디스크 복제로 성능이 크게 향상되었습니다.
이론적으로 일부(예: 선형) 작업 조건에서는 읽기/쓰기 속도가 시스템에 포함된 디스크 수만큼 증가합니다.
실제로 성능 향상은 이 수치의 50% -90%로 여전히 매우 중요합니다.
다운그레이드됨 - 디스크 중 하나에 치명적인 오류가 발생하면 데이터가 손실됩니다.어레이를 구성하는 디스크 볼륨의 합과 같습니다.
RAID 1
미러 디스크
정보의 중복으로 인해 신뢰성이 높아집니다.
읽기 속도는 이론적으로 디스크 수에 해당하는 요소만큼 증가합니다. NT에 구현된 알고리즘은 최적이 아니며 성능이 훨씬 약간 향상됩니다.
특히 완전히 멀티태스킹되지 않는 디스크 컨트롤러의 경우 쓰기 속도가 감소됩니다.
모든 디스크가 동시에 장애를 일으키거나 모든 디스크에 있는 동일한 정보가 손상된 경우에만 데이터 손실이 가능합니다.변경되지 않은 상태로 유지됩니다(추가 디스크로 인해 사용 가능한 디스크 공간이 증가하지 않음).
RAID 5
패리티가 있는 병렬 디스크
RAID 1과 RAID 0을 조합하면 추가 디스크를 더욱 효율적으로 사용할 수 있습니다.
읽기 속도는 RAID 0과 비슷한 방식으로 향상되지만 성능에 영향을 미치는 디스크 수는 1개 감소해야 합니다. 저것들. 3개의 RAID 5 드라이브는 2개의 RAID 0 드라이브와 거의 동일한 읽기 속도를 갖습니다.
쓰기 속도는 각 디스크의 개별 쓰기 속도보다 빠르지만 일반적으로 높지는 않습니다.
세트에 있는 두 개의 디스크에 장애가 발생하면 데이터가 손실될 수 있습니다. 디스크 중 하나에 오류가 발생하면 전체 어레이의 속도가 크게 감소하며 실제로는 데이터 손실이 없더라도 긴급 상황입니다.증가.
전체 디스크 볼륨의 손실은 디스크 1개의 볼륨입니다.
예를 들어 10GB 디스크 5개는 40GB의 RAID 5를 제공합니다.

각 RAID 유형을 자세히 살펴보겠습니다.

RAID 0(병렬 드라이브)

이 전략은 순전히 생산성 향상에 초점을 맞추고 있습니다. 여러 디스크는 배열의 모든 디스크가 존재할 때만 하나의 볼륨으로 수집되는 디스크 구조의 일부를 저장합니다.

예를 들어 두 개의 디스크에서 RAID 0을 가장 간단하게 구현하는 것은 볼륨의 첫 번째 모든 섹터(또는 기타 정보 양)가 물리적 디스크 A에 있고 매 두 번째 섹터가 디스크 B에 있음을 나타냅니다. 이러한 엄격한 전략 데이터가 있는 위치에 대한 정보를 저장하기 위한 추가 구조를 피할 수 있습니다. 읽기 속도와 쓰기 속도는 동일하며 디스크 수에 따라 달라집니다.

  • 무작위로 위치한 데이터로 작업하는 작업 속도는 다음 구성표를 따릅니다. 이는 모두 다음 정보를 쓰려는 디스크가 비어 있고 요청을 즉시 이행할 준비가 되어 있을 확률에 따라 달라집니다. 예를 들어, 두 디스크의 RAID 0: 디스크 중 하나에서 작업이 수행되고 디스크 시스템과 함께 작동하기 위한 추가 명령이 수신되면 명령을 실행하기 위해 여유 디스크를 방해해야 할 확률이 높아집니다. 이 순간디스크는 50%입니다. 이는 무작위 작업 성능이 전체적으로 1.5배 증가한 것에 해당합니다. 예를 들어, 10개의 디스크 어레이를 사용하는 경우 이미 사용 중인 드라이브에 작업이 들어갈 확률은 10%에 불과합니다. 즉, 성능이 9배 향상됩니다. 엄격한 확률 이론을 좋아하는 분들을 위해 이러한 계산은 시스템의 실제 작동에 대한 일부 요소를 고려하지 않지만 그럼에도 불구하고 숫자는 정확히 이 순서를 갖는다는 점에 주목하고 싶습니다.
  • 연속된 섹션을 읽거나 쓰는 순차 작업은 거의 항상 별도의 물리적 디스크에서보다 n배 빠릅니다. 여기서 n은 세트에 있는 디스크 수입니다. 이는 다음 작업에서 사용 가능한 디스크에 도달할 확률이 100%이기 때문에 발생합니다. 결국 작업은 디스크 전체에 고르게 분산된 연속 블록에서 수행됩니다.

결론적으로 RAID 0은 어떤 경우에도 선형 작업 속도를 크게 높이고 세트에 포함된 디스크 수가 증가하면 임의 데이터 작업 속도도 크게 향상됩니다. 을 위한 효과적인 작업 RAID 0 모드의 디스크 시스템에서는 멀티태스킹 컨트롤러 작업이 필요하며, 액세스를 제공하는 다른 컨트롤러도 바람직합니다. 다른 디스크. IDE 인터페이스에서 이러한 작업을 수행하기 위한 전제 조건은 버스 마스터링 드라이버입니다. Windows 2000에는 모든 일반적인 작업에 대해 이 모드를 자동으로 활성화하는 드라이버가 내장되어 있습니다. 컨트롤러 IDE, NT4의 경우 추가 드라이버 또는 레지스트리 키 변경이 필요할 수 있습니다.

RAID 0의 신뢰성은 낮습니다. 각 디스크의 오류는 일반 파티션의 경우 드라이브 오류와 마찬가지로 치명적인 오류입니다.

전체적으로 시스템 오류 확률은 증가합니다. 사용하는 디스크가 많을수록 그 중 하나 이상의 오류 가능성이 높아지고 그에 따라 볼륨 데이터의 일부가 손실됩니다.

RAID 1(미러링된 드라이브)

데이터를 안전하게 유지하는 가장 쉬운 방법은 두 개의 디스크를 복사하는 것입니다. 쓰기는 두 디스크에 동시에 수행되므로 이 프로세스 속도가 느려지는 반면, 읽기는 현재 사용 가능한 디스크에서 수행됩니다. 물론 시스템이 이러한 읽기를 효율적으로 수행할 수 있는 경우(버스 마스터링이 필요함). 불행하게도 NT에서 구현된 알고리즘은 최적이 아니며 읽기 성능이 훨씬 약간 증가합니다.

소프트웨어 모드에서 RAID 1의 복잡성 중 일부는 시스템이 두 디스크의 데이터 ID를 완전히 확신할 수 없는 경우가 많다는 것입니다. 심각한 오류가 발생한 후 두 개의 물리적 디스크를 조정하는 작업은 몇 시간이 걸리고 매우 부적절할 수 있으므로 소프트웨어 RAID 1을 매우 신중하게 사용해야 합니다. 신뢰성을 위해 디스크 어레이를 여러 배로 늘리기로 결정한 경우 이동 중에 고장난 디스크를 교체하고 데이터 동기화 자체를 모니터링하는 하드웨어 RAID 컨트롤러를 구입해야 할 수도 있습니다.

어떤 경우에도 디스크가 완전히 미러링되므로 디스크 중 하나에 완전한 오류가 발생하더라도 데이터 손실로 이어지지 않습니다.

RAID 5(패리티가 있는 병렬 드라이브)

이 전략은 현재 3개 이상의 디스크로 구성된 RAID 운영을 위한 가장 성공적이고 효율적인 방식인 것으로 보입니다. 이 정보는 이 정보에 의해 제어되는 실제 데이터와 다른 물리적 디스크에 있는 소위 패리티 데이터로 보완됩니다.

예를 들어 패리티의 개념은 다음과 같이 이해될 수 있습니다. 예를 들어 세트 (0, 1, 1, 0, 1)와 같이 5개의 비트가 있다고 가정해 보겠습니다. 이 규칙에 따라 또 다른 비트(6번째 패리티 비트)를 형성합니다. 이전 5개 비트의 1의 수가 짝수이면 1이 되고, 그렇지 않으면 0이 됩니다. 우리의 경우, 일의 수는 3입니다. 즉, 홀수입니다. 우리 집합에는 숫자 0이 더해지고 (0, 1, 1, 0, 1, )이 됩니다.

데이터 세트가 (0, X, 1, 0, 1, ) 손상되었다고 가정해 보겠습니다. 1의 개수는 홀수(마지막 비트)여야 한다는 규칙을 통해 X가 1이었다고 추측할 수 있습니다. 결과적으로 6비트(5개의 데이터 비트와 1개의 패리티 비트) 세트는 중복되며 6비트 중 손실된 부분을 지능적으로 수정할 수 있습니다.

패리티 작업은 비트뿐만 아니라 모든 양의 데이터에 대해서도 수행할 수 있으며 이는 가장 간단한 데이터 복구 알고리즘에 사용됩니다.

RAID 5 장치로 돌아가기:

그림은 5개의 디스크로 구성된 배열을 보여줍니다. 각 디스크에는 4개의 (조건부) 실제 데이터 조각과 1개의 패리티 데이터 블록이 저장되어 있음을 알 수 있습니다. 패리티 블록(가령 0 패리티)은 A0, B0, C0 및 D0 중 하나를 제외한 조각 중 하나의 손실을 복구할 수 있습니다. 이들은 함께 0 패리티 블록을 복원할 수 있습니다. 표시된 RAID 구조에서 RAID에 필요한 데이터를 볼 수 있습니다. 완전한 회복전체 열, 즉 장애 발생 시 모든 디스크의 정보는 다른 디스크에 있습니다. 이것이 복원으로 구성됩니다. 데이터가 디스크 중 하나에 기록되면 현재 블록에 해당하는 다른 디스크의 패리티 블록도 업데이트됩니다(예를 들어 A2에 기록하면 블록 2 패리티도 업데이트됩니다). 정상 디스크에서 데이터 읽기는 패리티 블록을 사용하지 않고 발생합니다. 즉, RAID 0과 거의 동일한 모드입니다. NT에 구현된 RAID 5는 RAID 0보다 약간 더 빠릅니다.

유일한 오버헤드 - 장애가 발생한 경우 어레이 성능이 엄청나게 감소합니다. 예를 들어 D4와 같이 직접 읽을 수 없는 경우 이 블록의 데이터를 복원해야 하기 때문입니다. 동시에 다른 모든 디스크를 사용합니다. 우리의 경우에는 블록 4 패리티, B4, C4 및 E4가 됩니다.

보시다시피 RAID 5 디스크 중 하나의 오류는 치명적이지는 않지만 적어도 어레이의 읽기 속도 때문에 심각한 긴급 상황입니다. 또한 최소 3개 드라이브에 대한 요구 사항이 어디서 나오는지 추측하는 것도 어렵지 않습니다. 드라이브가 2개인 경우 RAID 5는 간단히 RAID 1로 변질됩니다. 한 요소에서 목록 패리티 정보를 생성하는 유일한 방법은 이 요소를 어떻게든 복제하는 것이기 때문입니다. .

신뢰성 가정

또 어떻게요? 예, 다시 한 번 말씀드립니다. RAID는 모든 하드웨어 문제에 대한 만병통치약도 아닙니다. 어떤 사람들에게는 매우 예상치 못한 말을 해야겠습니다. 신뢰할 수 없는(잘못된) 컴퓨터에서 RAID는 단일 디스크 시스템만큼 충돌하기 쉽습니다.. 다음과 같은 경우에는 RAID가 전혀 저장되지 않습니다.

  • 잘못된 데이터를 올바르게 쓰는 것은 물론, 예상 영역 밖의 데이터를 쓰는 것도 가능합니다. 이는 이전과 마찬가지로 메모리, 프로세서, 케이블, 컨트롤러, 드라이브 전원 공급 장치 결함으로 인해 발생합니다.
  • 드라이브가 읽기 오류를 보고할 수 없는 경우.

RAID는 단 한 가지 경우(물리적 장애)의 피해를 최소화하도록 설계되었습니다. 하드 드라이브 또는 컨트롤러(다중 컨트롤러 RAID의 경우)일 수도 있습니다. 메모리, 운영 체제 및 실제로 RAID의 다른 모든 것의 오류 제공되지 않음- 단일 NTFS 전략과 같은 방식입니다.

마지막으로, 위의 RAID 레벨 작동 원리는 시스템의 디스크 중 하나에 오류가 발생하면 가능한 한 빨리 제거해야 하는 사고로 간주된다는 것입니다. 이는 특히 디스크 중 하나에 오류가 발생하는 경우 정상적인 작동이 거의 불가능한 RAID 0 및 RAID 5의 경우에 해당됩니다.

Windows NT 소프트웨어 RAID 시스템에 대한 자세한 내용은 실제로 이러한 유형의 디스크가 생성되는 프로그램(또는 Windows 2000의 경우 모듈) 디스크 관리자에 대한 도움말을 참조하십시오. RAID를 생성하고 사용하는 워크스테이션의 기능이 매우 제한적이라는 사실에 주목합니다. 워크 스테이션예를 들어 NT4는 RAID 0(병렬 디스크)만 지원하는 반면 설명된 모든 옵션은 서버 운영 체제에서만 작동합니다. 6부. NTFS 볼륨 복구 전략

NTFS를 사용하는 컴퓨터가 부팅되지 않습니다. 이 경우 어떻게 해야 합니까? 데이터를 복구하는 방법? 동작이 다소 다른 경우가 두 가지 있습니다. 불행하게도 NT 및 그에 따른 NTFS를 복원하기 위한 간단한 전략은 없습니다. 시스템은 매우 복잡하고 DOS 또는 Windows95/98과 같은 가장 간단한 부팅 도구가 없습니다.

1. 첫 번째 옵션 - 시스템이 동일한 NTFS 디스크에 있었습니다. 시스템이 단순히 로딩을 중단했습니다. 그렇다면 90%의 경우에는 NTFS가 아니라 NT 자체만 키워야 합니다. 이 작업이는 이 기사의 범위를 훨씬 넘어서기 때문에 앞으로 작업할 수 있고 데이터를 읽을 수 있는 다음(동일한 NTFS 파티션에) 다른 NT 시스템을 배치하는 방법만 설명합니다.

NT4 사용자시스템을 NTFS에 직접 배치하여 어떻게든 설치 프로그램으로 부팅할 수 있습니다.

NT4의 올바른 배포 CD가 필요합니다. 이러한 속성은 NT4가 루트 디렉터리에 있는 i386이라는 디렉터리에 상주하는 디스크에서 발견될 가능성이 높습니다. 이 디렉토리에서 실행되는 winnt /? 명령은 NT4 설치를 직접 실행할 수 있는 세 개의 부팅 플로피를 만드는 키를 선택하는 데 도움이 됩니다. NTFS 드라이브. 전문가만이 이 특정 문제에 대한 접근 방식을 발견하면 다른 설치 디렉터리(예: winnt2)를 선택한 다음 자신의 NT4 설치를 다시 시도할 수 있습니다. 새로 설치된 운영 체제는 부팅 목록에 올바르게 입력되며 이전 NT4를 전혀 방해하지 않습니다.

적절한 형식의 CD가 없는 경우(증상 - CD가 있어도 반응하지 않는 "NT4 배포 키트가 있는 디스크 삽입"이라는 문구) - NTFS가 있기 때문에 NT를 다른 파티션에 배치하면 됩니다. NT 이외의 시스템에서는 디스크에 액세스할 수 없습니다.

Windows2000에서 새로운 형식으로 변환된 NTFS에는 NT4를 설치할 수 없다는 점을 고려해 볼 가치가 있습니다. NT4는 여전히 이러한 NTFS를 읽지만 SP4 이상을 사용할 수 있는 경우에만 해당됩니다.

Windows 2000 사용자부팅 가능한 Windows2000 CD(공식 배포판)를 찾아야 하며, 시스템을 처음부터 설치하거나 이전 설치를 복원하라는 메시지가 표시됩니다. Windows2000에서 작동했던 NTFS 드라이브는 Windows2000 또는 SP4 이상이 설치된 NT4에서만 읽을 수 있습니다.

주의 사항: 복구 디스크(NT4에서는 rdisk /s 명령으로 생성되고 Windows2000에서는 프로그램으로 생성됨) 없이 모든 NT를 복원하십시오. 예약 사본) 거의 불가능합니다. 이것은 전문가를위한 직업입니다. 그런데 복구 디스크가 있더라도 "복원된" 시스템 작업이 마음에 들지 않을 가능성이 높으므로 전체 시스템을 다시 설치하는 것은 거의 불가피합니다. 당신이 그렇지 않다면 경험이 풍부한 전문가 NT에서는 NT 설치 프로그램의 복구 옵션을 사용하지 않는 것이 좋습니다. 결과는 당신을 만족시키지 못할 가능성이 높습니다. 물론 시도는 고문이 아니지만 시스템의 본격적인 소생을위한 복잡한 작업은 매우 크고 어디에도 설명되어 있지 않으므로 부팅 가능하지만 중간 상태로 유지됩니다.

2. 시스템 자체는 작동하지만 디스크에 액세스할 수 없습니다(부팅할 수는 없지만 다른 디스크에는 액세스할 수 있음). 디스크 관리자는 파티션에 대해 알 수 없는 유형을 표시합니다. 대부분의 경우 이는 파티션의 부트 섹터(부트 섹터)가 덮어씌워졌음을 의미하며 NT는 이것이 NTFS인지 전혀 모릅니다. 운영 체제 NT는 만일의 경우를 대비해 파티션 끝에 부트 섹터의 복사본을 보관합니다. 이를 적절한 위치에 다시 복사하면 대부분의 경우 디스크가 NTFS로 인식되어 자체적으로 복구됩니다.

정확한 주소를 계산하는 과정은 꽤 복잡하므로 설명하지 않겠습니다. 이 경우에 대한 전체 지침을 보려면 MSDN 사이트로 이동하여 기술 자료 문서 번호 Q153973을 찾아야 합니다(대개 간단한 검색으로 이를 수행할 수 있음). 이 지침을 올바르게 따른 후에는 시스템이 최소한 인식됩니다. NTFS이며 추가 운명 분할은 NT의 내부 복구 도구에 따라 달라지며 이를 통해 유통됩니다. 겸손한 모습도 도움이 될 것입니다 chkdsk 명령, 이는 내부 복구 시스템에 대한 일종의 지름길입니다. 디스크 시스템 NT.

처음에 Linux의 표준 파일 시스템은 Ext2fs였습니다. Ext2는 i-노드 구조를 기반으로 합니다. I-노드에는 파일에 대한 정보와 파일이 있는 데이터 블록에 대한 포인터가 포함되어 있습니다. I/O 작업 속도를 높이기 위해 데이터가 일시적으로 랜덤 액세스 메모리. 캐시의 데이터가 디스크에 기록되기 전에 충돌이 발생하면 문제가 발생합니다. 이로 인해 파일 시스템에 불일치가 발생합니다. 예를 들어, 디스크에 아직 생성되지 않은 파일에 대한 링크가 발생하거나 파일이 이미 삭제되었지만 해당 i-노드와 데이터 블록이 디스크에 남아 있는 경우입니다. Fsck(파일 시스템 검사 - 파일 시스템 검사) - 표준 프로그램불일치를 해결합니다. 이를 수행하는 유일한 방법은 전체 디스크를 스캔하고 i-노드, 데이터 블록 및 디렉토리 내용 간의 모든 종속성을 확인하는 것입니다. 디스크 볼륨이 증가함에 따라 이 절차에 엄청난 시간이 걸리기 시작했습니다. 이는 지속적으로 작동해야 하는 서버에 심각한 문제입니다.

이것이 데이터베이스에서 가져온 트랜잭션 기술과 복구 기술을 파일 시스템에 도입한 주된 이유였으며, 이는 저널 파일 시스템의 출현으로 이어졌습니다.

저널 파일 시스템은 파일 시스템 구조가 변경되기 전에 파일 메타데이터에 대한 업데이트가 디스크에 기록되므로 데이터 무결성이 보장되는 내결함성 파일 시스템입니다. 장애 발생 시 저널링 파일 시스템은 손실된 모든 데이터의 복구를 보장합니다. 가장 일반적인 접근 방식은 파일 메타데이터를 기록하는 방법입니다. 그 본질은 모든 변경 사항에 대한 정보가 파일 시스템의 예약된 영역에 기록되고 그 후에야 변경 자체가 수행된다는 것입니다.

저널 파일 시스템을 사용하는 컴퓨터를 재부팅할 때 마운터는 저널에서 예상했지만 변경되지 않은 내용을 확인하고 이를 파일 시스템에 기록함으로써 파일 시스템의 무결성을 보장할 수 있습니다. 대부분의 경우 시스템은 파일 시스템의 무결성을 확인할 필요가 없습니다. 즉, 재부팅 후 거의 즉시 컴퓨터를 작업할 수 있습니다. 따라서 파일 시스템 문제로 인한 데이터 손실 가능성이 크게 줄어 듭니다.

Linux에는 Namesys의 ReiserFS, SGI의 XFS, Ext2 개발에 도움을 준 Stephen Tweedie가 개발한 Ext3라는 세 가지 주요 저널링 FS가 있습니다.

기존 Unix 시스템에 비해 성능을 향상시키기 위한 가장 간단한 도구는 연결 목록이나 비트맵의 사용을 피하는 것입니다. 이는 확장성 문제를 일으키고 용량이 큰 새 디스크에는 적용할 수 없습니다. 모든 새로운 시스템은 균형 잡힌 트리(B-트리) 또는 그 변형(B+트리)을 사용합니다.

트리는 내부 노드와 리프 노드로 구성됩니다. 각 노드는 디스크 블록입니다. 각 객체(파일, 디렉터리)에는 다른 파일 시스템의 inode 번호와 유사한 고유 키가 할당됩니다. 내부 노드는 주로 하위 노드에 대한 키와 포인터로 구성됩니다. 트리를 시작하는 노드를 루트라고 합니다. 나무 가지 끝에 있는 노드를 나뭇잎이라고 부르기도 합니다.

B+Trees의 검색 시간은 개체 수(디렉토리의 파일 또는 디스크의 블록 수)가 아니라 이 수의 로그에 비례합니다. 균형 잡힌 트리에서는 모든 가지(루트에서 "잎"까지의 경로)의 길이가 동일합니다.

ReiserFS는 파일 시스템 개체 구성에 있어 B+Tree를 기반으로 구축됩니다. ReiserFS는 메타데이터 로깅만 제공합니다. 예정되지 않은 재로드가 발생하는 경우 충돌 시 사용된 블록의 데이터가 손상될 수 있으므로 ReiserFS는 충돌 후 데이터가 그대로 유지된다는 것을 보장하지 않습니다.

ReiserFS에는 특히 작은 파일 처리 개선을 목표로 하는 여러 기능도 있습니다. 다음 중 하나 접근성 ReiserFS는 테일 패킹입니다. 테일은 논리 블록보다 작은 파일이거나 한 블록보다 작은 파일의 일부입니다. 여유 공간을 절약하기 위해 ReiserFS는 테일 파일 압축을 사용하며 이를 통해 약 5%의 여유 공간 증가가 가능합니다. 자유로운 장소 Ext2와 비교. 속도를 높이기 위해 ReiserFS는 디스크 블록에 대한 포인터가 아닌 b*트리 내부에 직접 파일 내용을 저장할 수 있습니다.

XFS는 Irix OS를 실행하는 멀티미디어 컴퓨터를 위해 Silicon Grapgics(현재 SGI)에 의해 90년대 초반(1992-1993)에 만들어졌습니다. 파일 시스템은 매우 적합했습니다. 대용량 파일및 파일 시스템. 2001년 5월 1일, SGI는 Linux용 XFS의 첫 번째 릴리스를 출시했습니다.

파일 시스템 확장성을 높이기 위해 XFS는 B+Trees를 광범위하게 사용합니다. XFS를 사용하면 저널을 다른 블록 장치에 저장할 수 있습니다.

XFS에는 지연된 할당이라는 기능이 있습니다. 파일이 캐시에 기록될 때 파일에 블록을 할당하는 대신 XFS는 파일 시스템에 블록을 예약하여 데이터를 특수 가상 영역(가상 범위)에 배치합니다. 전체 파일이 메모리에 포함되어 있으면 일반적으로 인접한 디스크 공간의 한 부분에 배치될 수 있습니다. 이렇게 하면 파일 조각화가 방지됩니다.

최대 파일 크기 - 900만TB

ReiserFS에서 예상치 못한 재로드로 인해 언젠가부터 변경 가능한 파일 조각이 발생할 수 있습니다. 원격 파일. 명백한 데이터 손실 외에도 가정적으로 이는 더 심각한 결과를 초래할 수 있습니다. XFS는 "인수된" 블록이 0으로 채워지는 것을 보장합니다. 0바이트의 블록이 있으므로 시스템 파일무시하면 보안 허점이 제거됩니다.

Ext3은 Ext2의 추가 기능입니다. 한편으로는 더 많은 작업에 대한 작업 로그를 유지할 수 있습니다. 빠른 회복. 그러나 이 파일 시스템은 Ext2의 몇 가지 제한 사항(예: 블록 기반이며 파일 및 디렉터리에 대한 무차별 검색 사용)을 상속받았으므로 순수한 저널링 파일 시스템이라고 할 수 없습니다.

저널은 다른 파일 시스템에 있습니다. 공유 저널을 사용하여 여러 Ext3 파일 시스템을 가질 수 있습니다.

/etc/fstab 파일에서 활성화할 수 있는 Ext3에서 지원하는 로깅 유형:

  • data=journal (전체 데이터 저널링 모드) - 모든 새 데이터는 먼저 저널에 기록된 다음 영구 위치로 전송됩니다. 충돌이 발생하면 로그를 다시 읽어 데이터와 메타데이터를 일관된 상태로 만들 수 있습니다. 가장 느리지만 가장 안정적입니다.
  • data=ordered – 파일 시스템 메타데이터 변경 사항만 기록되지만 논리적으로 메타데이터와 데이터 블록은 트랜잭션이라는 단일 단위로 그룹화됩니다. 새 메타데이터가 디스크에 기록되기 전에 관련 데이터 블록이 먼저 기록됩니다. 이 모드는 기본적으로 설정되어 있습니다. 파일 끝에 데이터를 추가할 때 data=ordered 모드는 무결성을 보장합니다(전체 데이터 저널링 모드에서와 마찬가지로). 그러나 데이터가 기존 블록 위에 파일에 기록되면 "원본" 블록과 수정된 블록이 혼합될 가능성이 있습니다. 이는 새 블록이 기존 블록을 오버레이하고 메타데이터가 수정되지 않는 레코드를 추적하지 않는 data=ordered의 결과입니다.
  • data=writeback (메타데이터만) – 파일 시스템 메타데이터 변경 사항만 씁니다. 가장 빠른 로깅 방법. XFS 및 ReiserFS에서 사용되는 것과 유사합니다.

파일 NTFS 시스템 1993년 Windows NT 3.5부터 시작되었습니다. 그녀는 최대 수백 테라바이트 크기의 디스크를 관리할 수 있습니다.

NTFS 볼륨의 각 파일은 다음 항목으로 표시됩니다. 특수 파일, 마스터 파일 테이블(MFT - 마스터 파일 테이블)이라고 합니다. 이 테이블의 첫 번째 항목은 기본 파일 테이블을 직접 설명합니다.

그 다음에는 미러 레코드(Mirror Record) MFT가 이어진다. 첫 번째 MFT 항목이 손상된 경우 NTFS는 두 번째 항목을 읽어 미러링된 MFT 파일을 찾습니다.

세 번째 MFT 항목은 로그 파일입니다. Log에서 사용하는 트랜잭션 단계 목록이 포함되어 있습니다. 파일 시스템장애가 발생한 경우 파일을 복원합니다. 마스터 파일 테이블의 17번째 이후 항목은 파일과 디렉터리 자체에서 사용됩니다.

작은 파일과 디렉토리는 마스터 파일 테이블 항목 내에 완전히 포함될 수 있습니다. 대규모 디렉토리는 B-트리로 구성되며, 항목은 MFT 구조 내에서 기록될 수 없는 디렉토리 항목이 포함된 외부 클러스터를 가리킵니다.