Linux는 파일을 어떻게 읽거나 데이터를 복구합니까?

First and Foremost는 최전선에 쓰여졌습니다.
이 기사는 계속 업데이트 될 것입니다. 저는 Linux_os에 대한 가장 간단한 이해인 Mr. Zhu Youpeng의 Linux 다중 프로세스 다중 스레딩을 배우고 있습니다.

Linux 읽기 파일 프로세스

파일 IO 효율성 및 표준 IO

Linux에서는 API, C 언어에서는 라이브러리 함수라고합니다.

(1) 파일 IO는 현재 우리가 이야기하고있는 열기, 닫기, 쓰기, 읽기 및 기타 API 기능을 의미합니다.

파일 읽기와 쓰기를위한 시스템을 구성하며 파일 읽기와 쓰기를 아주 잘 완료 할 수 있지만 효율성이 가장 높지는 않습니다.

(2) 애플리케이션 계층 C 언어 라이브러리 함수는 표준 IO라고하는 파일을 읽고 쓰는 데 사용되는 함수 목록을 제공합니다.

표준 IO는 일련의 C 라이브러리 함수 (fopen, fclose, fwrite, fread)로 구성됩니다.

이러한 표준 IO 기능은 실제로 파일 IO로 캡슐화됩니다.

(사실 fopen은 open을 호출하고 fwrite는 write를 사용하여 파일 쓰기를 완료합니다.)

표준 IO가 캡슐화 된 후 주로 응용 프로그램 계층에 버퍼 메커니즘 버퍼 를 추가합니다 .

이런 식으로 fwrite를 통해 작성한 내용은 커널의 buf에 직접 들어 가지 않습니다.

대신 먼저 애플리케이션 계층 표준 IO 라이브러리에서 유지 관리하는 버퍼를 입력하십시오.

그런 다음 표준 IO 라이브러리 자체가 운영 체제의 단일 쓰기 횟수에 따라 적절한 시간을 선택하여 커널에 대한 buf 쓰기를 완료합니다.

(커널의 buf는 하드 디스크의 특성에 따라 선택되고 마지막으로 하드 디스크에 기록됩니다.)

그림에서 볼 수 있듯이
문서 흐름
첫 번째 버퍼는 응용 프로그램 계층에 있고 두 번째 버퍼는 커널에 있습니다.

파일 읽기 프로세스에 대해 이야기 한 후 파일이 하드 디스크에 저장되는 방식을 살펴 보겠습니다.

하드 디스크에 파일 저장

(1) 파일은 일반적으로 하드 디스크에 저장되며 하드 디스크에 저장된 파일은 고정 된 형태로 저장되며이를 정적 파일이라고합니다.

(2) 하드 디스크는 두 가지 주요 영역으로 나눌 수 있습니다.

하나는 하드 디스크 컨텐츠 관리 테이블 항목이고 다른 하나는 컨텐츠가 실제로 저장되는 영역입니다.

운영 체제가 하드 디스크에 액세스하면 먼저 하드 디스크 콘텐츠 관리 테이블을 읽습니다.

액세스하려는 파일의 섹터 수준 정보를 찾고,

그런 다음이 정보를 사용하여 콘텐츠가 실제로 저장된 영역을 쿼리하고 마지막으로 원하는 파일을 가져옵니다.

(3) 운영 체제가 얻는 첫 번째 정보는 파일 이름이고 최종 결과는 파일 내용입니다.

첫 번째 단계는 하드 디스크 내용 관리 테이블을 쿼리하는 것으로,이 관리 테이블은 각 파일의 다양한 정보를 파일 단위로 기록합니다.

각 파일에는 정보 목록이 있습니다 (기본적으로 구조 인 i-node라고 부르는 inode,
이 구조에는 많은 요소가 있으며 각 요소
는 파일 이름 및 하드 디스크의 파일을 포함하여 파일 에 대한 일부 정보를 기록 합니다. 해당 섹터 번호, 블록 번호 및 기타 사항 ...)

강조 : 하드 디스크 관리는 파일을 기반으로하며 각 파일에는 inode가 있으며

각 inode에는 구조에 해당하는 디지털 번호가 있으며 다양한 정보가 구조에 기록됩니다.

메모리에서 열린 파일 및 vnode

(1) 프로그램의 실행은 프로세스이고, 프로그램에서 연 파일은 프로세스에 속합니다.

각 프로세스에는이 프로세스의 모든 정보를 기록하는 데 사용되는 데이터 구조가 있습니다 (프로세스 정보 테이블이라고 함).

테이블의 포인터는 파일 관리 테이블을 가리 킵니다.

파일 관리 테이블은 현재 프로세스에서 연 모든 파일과 관련 정보를 기록합니다.

파일 관리 테이블에서 열려있는 각 파일을 색인화하는 데 사용되는 색인은 파일 설명자 fd입니다.

마지막으로 찾은 것은 열린 파일의 관리 구조 vnode입니다.

(2) vnode는 열린 파일에 대한 다양한 정보를 기록합니다.

이 파일의 fd 만 알면됩니다.

이 파일의 vnode를 쉽게 찾고이 파일에 대해 다양한 작업을 수행 할 수 있습니다.
결론

  1. 프로세스 생성, 프로세스 정보 테이블 가져 오기
  2. 하드 디스크에 저장된 파일의 위치에 따라 파일의 fd를 가져옵니다 (파일 설명).
  3. 파일이 열려있는 동안 열린 파일의 다양한 정보를 기록하는 파일 관리 테이블 vnode가 생성됩니다.
  4. 위의 세 가지 정보로 파일을 읽고 쓸 수 있습니다.
  5. 하드웨어에 대한 다중 액세스를 방지하기 위해 캐싱 메커니즘이 설정되며 각 캐시는 2M이며 수정하려는 위치는 lseek 함수를 통해 찾습니다.
  6. 두 프로세스가 동일한 파일 인 o_append 속성을 공유합니다.

데이터 복구의 원리

일반적인 관행에 문의하여 하드 디스크 (U 디스크)를 포맷하면 빠른 포맷과 저수준 포맷이 있음을 알게됩니다.

빠른 포맷은 매우 빠릅니다. 32GB U 디스크를 포맷하는 데 1 초 밖에 걸리지 않습니다. 일반 포맷은 느립니다.

이 둘의 차이점은 무엇입니까? 실제로 빠른 포맷은 U 디스크의 하드 디스크 콘텐츠 관리 테이블 (inode) 만 삭제합니다.

실제 저장된 내용은 변경되지 않았습니다. 이 형식화 된 콘텐츠를 검색 할 수 있습니다.

하위 수준 포맷은 검색하기가 어려우며 플래시 메모리를 통해 검색해야하므로 매우 비쌉니다.

비판하고 수정하십시오

위에

추천

출처blog.csdn.net/Vast_Wang/article/details/102263198