CMD의 변환 명령은 어떻게 데이터 손실없이 FAT를 NTFS로 변환 할 수 있습니까?


5

내가 궁금했던 것. Windows에서 convert 명령은 FAT16 또는 FAT32 디스크를 비파괴 적으로 NTFS로 변환 할 수 있습니다 (즉, 데이터 손실없이).

convert X: /fs:ntfs

Windows가 정확히 어떻게 수행하는지에 대한 기술적 세부 사항 은 무엇입니까 ? 데이터를 지우지 않고 디스크의 파일 시스템을 변환하기 위해 무엇을하고 있으며 다른 파일 시스템에도 동일한 원리가 적용됩니까?

NTFS는 독점적 인 파일 시스템이므로 자세한 내용은 Microsoft 자신 만 알고있을 수 있지만이 문서에 대한 문서를 게시했는지 또는 다른 사람이 Windows / CMD를 찾아 낼 수 있을지 여부를 궁금해하고있었습니다.

다음 질문은 exFAT to FAT32 에 대해 이야기 하지만 완전히 다른 파일 시스템과 관련이 있으며 완전히 다른 답변을 갖는 완전히 다른 질문입니다.

다시 말하지만, convert데이터를 지우지 않고 디스크의 파일 시스템을 변환하기 위해 수행중인 작업과 동일한 원칙을 적용하는 것이 다른 파일 시스템에 적용되는지 여부 를 구체적으로 알고 싶습니다 .


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Journeyman Geek

답변:


8

먼저 두 가지 매우 다른 것을 구별하고 싶습니다.

  • 어떻게 독점의 구현 convert.exeWindows에서이 FAT32와 NTFS 사이에서 적절한 파일 시스템 변환을 담당한다.
  • 일반적으로 사용 가능한 디스크 공간의 2 배나 두 파일 시스템간에 상호 운용 가능한 메타 데이터 또는 문제를 사소하게 만드는 다른 멋진 요소없이 두 파일 시스템 간 변환 문제에 어떻게 접근 할 수 있습니까?

첫 번째로, 우리는 대부분 Windows의 소스에 액세스하는 사람은 NDA에 서명해야하므로 Microsoft가 그 정보를 공개 할 것을 자비합니다. Microsoft의 법률 팀에서 승인 한 경우에만 릴리스됩니다. 물론,이 질문을 읽는 누군가가 유출 된 Windows 소스의 불법 사본을 가져 와서 코드에서 알아낼 수는 있지만 합법적 인 회색 영역입니다.

따라서 답변이 없기 때문에 첫 번째 질문에 대한 답변을 제공하지 않습니다.

그러나 두 번째 질문에 대답하겠습니다.

파일 시스템의 역사에는 OS를 지우거나 다시 설치하거나 두 번째 디스크를 사용하지 않고 한 파일 시스템에서 다른 파일 시스템으로 업그레이드하려는 많은 경우가 있습니다. 몇 가지 예를 들면 다음과 같습니다.

  • 2017 년에 Apple iOS 기기를 iOS 10.3으로 업그레이드하는 모든 사람 은 iDevice의 내장 NAND에서 HFS +에서 APFS로 전체 파일 시스템 업그레이드를 받았습니다.
  • 수년 동안 btrfs는 btrfs-convert 도구를 사용하여 ext4에서 btrfs로 파일 시스템 업그레이드를 지원했습니다 .

오픈 소스 fstransform 프로그램은 여러 가지 파일 시스템 (일부주의 사항 및 제한 사항) 을 변환하기위한 것으로, 대부분의 일반적인 Linux 파일 시스템과 인상적인 NTFS를 포함합니다! 그러나 다른 많은 파일 시스템을 지원하더라도 FAT32는 아직 지원하지 않습니다.

C ++ 코드를 읽으면 원본 파일 시스템 작성자가 소스 파일이나 대상 파일 시스템에 의해 호환성이나 상호 운용성을 계획하거나 설계하지 않은 경우에도 이기종 파일 시스템 간 변환과 관련된 일반적인 알고리즘에 대해 가장 자세한 기술 지식을 제공 할 수 있습니다. !).

광범위한 과정에서 일반적인 프로세스는 다음과 같습니다.

  • 현재 파일 시스템의 파일 / 디렉토리 트리를 걷습니다. 기존 파일 시스템 내의 새로운 일반 파일 에서 현재 파일 시스템의 파일 목록을 기반으로 FS 특정 파일 테이블 (파일, 디렉토리, 기호 링크, 권한 등)을 파일 시스템 형식으로 구성합니다. .
  • 새 파일 시스템의 데이터 구조와 관련하여 이전 파일 시스템의 데이터 구조 및 내부 메타 데이터를 형식화하고 새 파일 테이블 내에서 포인터 (해당되는 경우 논리 디스크 블록 및 오프셋)를 업데이트하여 재 계산 된 파일을 가리 킵니다. / directory / permission 블록 ( "inodes"또는 "streams"와 같은 일반적인 개념을 사용하여 변환하는 파일 시스템에 따라 다름)
  • 프로세스가 끝날 때, 새로운 파일 시스템의 메타 데이터로 원본 파일 시스템의 메타 데이터 (마법 번호 등을 사용하여 파일 시스템을 이전 파일 시스템 유형으로 식별)를 파괴적으로 덮어 쓰고 "슈퍼 블록"을 가리키는 적절한 맵을 생성합니다. "MFT"또는 파일 시스템 자체를 초기화하는 데 필요한 파일 시스템 별 데이터 구조
  • 디스크 전역 파티션 테이블 (예 : MSDOS 형식 또는 GPT 형식)을 업데이트하여 필요한 경우 파티션에 포함 된 파일 시스템 유형을 암시하는 매직 번호를 업데이트하십시오 (참고 : 특정 파일 시스템은 동일한 매직 번호를 공유합니다. 일부 파일 시스템 드라이버는 매직 번호를 무시하고 파일 시스템의 실제 데이터 구조를 "프로브 (probe)"하여 해당 파티션에 지정된 파일 시스템의 인스턴스가 있는지 여부를 판별 할 수 있습니다.)

적어도 마지막 두 단계는 원 자성아니라는 점에 주목할 가치가 있습니다.; 즉, NTFS, reiserfs, XFS, zfs 등과 같은 저널 파일 시스템의 일반적인 원 자성을 보장 할 수 없습니다. 시스템이 충돌하거나 전원이 꺼 지거나이 프로세스 중에 변환을 수행하는 사용자 공간 프로그램이 충돌하거나 중단 된 경우에도 파일 시스템은 데이터 복구 전문가가 데이터를 다시 가져 오거나 파일 시스템에 대한 온 전성을 복원해야합니다 (이전 또는 신규). 이러한 "파괴적인"작업 중에 기본 저장 매체는 본질적으로 이전 파일 시스템의 저널을 우회하는 프로세스로 인해 파일 시스템 저널에 의해 백업되지 않는 방식으로 중요한 데이터를 파괴적으로 덮어 씁니다 (하나에서 변경하기 위해). 다른 파일로 FS를 사용하면 이전 파일 시스템에 핵심 메타 데이터를 알 수없는 것으로 덮어 써서 "안전하게 죽 이도록"지시 할 수 없습니다.

반대로 데이터 쓰기 를 수행하여 일반 쓰기 를 수행하는 파일 시스템을 요청하는 것은 사실상 원자 적입니다. 전체 쓰기가 완료되거나 전혀 완료되지 않습니다 (저널 영역에 대한 불완전한 부분 쓰기는 롤백 될 수 있음) 시스템 BSOD 또는 커널 패닉 후 부팅시 fsck또는 chkdsk프로그램이 수행 하는 쓰기 도중에 시스템 충돌이 발생 합니다.)

전체 FS 변환은 매우 위험합니다. 많은 작업의 안전성이 보장되지 않기 때문에 BIOS 플래시 (모바일 장치에서 부팅 할 수없는 OS를 사용하여 영구적으로 브릭 킹 할 수있는 모바일 장치)만큼 위험합니다. 시간이 오래 걸리는 경향이 있기 때문에 사용자가 변환 중에 OS가 정지되고 전원을 껐다 켜거나 배터리가 부족한 배터리로 작동하는 장치를 사용한다고 생각할 가능성이 높습니다.

이 작업을 수행 할 수있는 방법에 더 많은 통찰력을위한 안전하고 두 파일 시스템의 알고 협력 설계 , 다른 하나 사이의 변환 (나는 그것을 이해했다, iOS의 HFS + APFS에 변환의 경우),이 매혹적인 talk 는 APFS에서 도대체 무슨 일이 일어나고 있는지 알아 내기 위해 법 의학적 접근법을 취합니다. 변환 문제를 직접 해결하지는 않지만 제공된 정보에서 변환에 대한 몇 가지 세부 정보를 유추 할 수 있습니다.

이것은 모두 당신의 정확한 원래 질문에 대한 확실한 대답을 찾지 못할 수도 있지만, 전체 FS 변환의 일반적인 프로세스에 대한 많은 지식을 제공하면 가능성이 무엇인지를 미스터리 할 수있는 충분한 단서를 제공해야한다고 생각합니다. 에 대한 프로세스입니다 convert.exe.

BTW, 나는 원래 "ReactOS가 이미이 툴을 구현했을 것이고 소스 코드를 볼 수있을 것입니다."라고 생각했습니다. - 아니 그들은 ReactOS에서 open.exe로 convert.exe를 구현하지 않았습니다. 시스템의 모든 사용자가 전혀 사용하지 않는 경우 독점 MS Windows 바이너리를 실행해야합니다. 그렇지 않으면 ReactOS 에서이 유틸리티를 제공하지 않는 것 같습니다.


1
훌륭하고 유익한 답변, 올바른 세부 사항. 감사합니다.
Hashim

내가 기회를 얻 자마자 그 대화를 보았습니다.
Hashim

7

convert의 동작 에 관한 몇 가지 힌트가 있습니다.

FAT 또는 FAT32에서 NTFS로 변환 된 볼륨의 경우 :
기존 디스크 사용으로 인해 MFT는 원래 NTFS로 포맷 된 볼륨과 다른 위치에 생성됩니다. [...] 예를 들어 MFT는 변환 된 볼륨에서 조각화 될 수 있습니다.

출처

  • Convert.exe를 사용하려면 변환 할 드라이브 나 파티션에 여유 공간이 있어야합니다. Convert.exe가 볼륨에 사용 가능한 공간이 충분하지 않다고 판단하면 볼륨을 변환하지 않습니다.

출처

이것들로부터 이것이 프로세스라는 것을 추측 할 수 있습니다 :

  1. "인공"MFT는 기존 FAT 또는 파일을 방해하지 않도록 자유 FAT 블록 어딘가에 생성됩니다.
  2. 볼륨의 사용 가능한 FAT 블록은 NTFS 블록으로 변환됩니다.
  3. 파일은 FAT 블록에서 NTFS 블록으로, FAT에서 MFT로 이동됩니다.
  4. 모든 파일이 변환 될 때까지 2 단계와 3 단계가 반복됩니다.
  5. FAT가 차지하는 공간은 NTFS 블록으로 변환됩니다.
  6. 파티션의 메타 데이터가 다시 작성되어 볼륨이 이제 FAT가 아니라 NTFS임을 나타냅니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.