하나의 SSD에있는 두 개의 드라이브간에 파일을 이동합니다.


18

하나의 드라이브 내에서 파일을 이동할 때 파일이 복사 및 삭제되지 않습니다. 파일을 참조하는 테이블이 업데이트되었습니다. 내가 아는 한 HDD의 2 개 드라이브에는 해당되지 않습니다. 그러나 SSD는 다르며 각 드라이브 전용의 물리적 공간이 없습니다. ( 소스 )

그래서 내 질문은 파일이 동일한 SSD의 한 드라이브에서 다른 드라이브로 이동하거나 바이트가 복사되고 원본이 삭제되거나 일부 테이블이 업데이트되어 SSD가 덜 쓰러지면 어떻게됩니까?

이미 중복 된 질문이 있습니다 . 그러나 두 대답 모두 주장합니다.

각 파티션에는 드라이브의 자체 물리적 영역이 있습니다.

하드 드라이브 파티션은 실제로 각 파티션에 대한 물리적 영역을 지정합니다. SSD는 여전히 하드 드라이브이며 디스크가 없습니다.

내가 아는 한 그것은 잘못입니다. 여기를 참조 하십시오 .

그렇다면 SSD에 대해 더 잘 아는 사람은 실수에도 불구하고 평가가 올바른지 알려주세요.


14
정답은 맞습니다. 각 파티션에는 고유 한 독립적 인 파일 시스템이 있습니다. 각 파일 시스템은 자신에게 할당 된 블록을 활용하는 방법을 스스로 결정합니다. SSD의 펌웨어를 제안하려면 Linux와 같은 파일 시스템 및 사용자 도구 mv가 추상화 계층을 크게 혼합하여 협력해야합니다.
Kamil Maciorowski

2
@ Kamil : OS가 그것을 구현 mv한다면 실제로 현재보다 적은 작업을 수행해야한다고 생각합니다. 즉, OS는 현재 발생하는 것처럼 파일 시스템 이름 바꾸기 ()가 실패하는 대신 성공하는지 확인해야합니다.
grawity

16
"[SSD / HDD]에 2 개의 드라이브"-하나의 SSD / HDD에 2 개의 파일 시스템 또는 2 개의 파티션을 말하는 것 같습니다. 두 약어의 마지막 "D"는 "드라이브"이므로 1 개의 드라이브에 2 개의 드라이브가 있다는 것을 의미합니다.
JoL

1
디스크 관리 대화 상자를 예로 들어 보겠습니다. 그것은 말한다 Change Drive Letter and Paths파티션 / 볼륨을 참조 할 때.
ispiro

4
@ispiro Windows에 있습니까? 사용자를 혼란스럽게하는 끔찍한 방법 인 것 같습니다. 나는 그들이 구현 된 드라이브 파티션 전에 "드라이브 문자"라는 용어를 생각 해낸 다음 드라이브 파티션을 독립형 "드라이브"로 표현했습니다. 이제 하나의 하드웨어 드라이브의 파티션을 나타내는 여러 개의 Windows "드라이브"를 가질 수 있습니다.
JoL

답변:


38

내가 아는 한 그게 잘못이야

인용 된 설명은 반 정확하고 반 정확합니다. 그러나 HDD에도 절반이 잘못되었습니다.

드라이브 파티션은 각 파티션의 논리 영역을 지정 합니다. OS는 물리적 위치를 전혀 신경 쓰지 않습니다. 드라이브에 "읽기"만 요청합니다 논리 블록 # 31415926"을 하면 드라이브 자체가 데이터의 위치를 ​​결정합니다. 이것은 마그네틱 및 플래시 메모리와 같은 방식으로 작동합니다.

실제로 동일합니다초기 운영 체제는 실제 실린더 / 헤드 / 섹터 위치를 사용했지만 오래 전부터 지난 20 ~ 25 년 동안의 HDD와 합니다. 플래터 LBA # 1234가 어디에 있는지 정확하게 알지 못합니다. HDD는 불량 물리 섹터를 자동으로 다시 매핑하기 때문에 SSD와 마찬가지로 완전히 다른 물리적 영역에서 동일한 LBA를 갑자기 읽을 수 있습니다.

따라서 HDD와 SSD 모두 OS는 데이터를 읽고 쓸 수있는 다양한 LBA (예 : 0–999999) 만 있습니다. 파티셔닝의 목적은 하위 범위를 할당하는 것입니다. 예를 들어 파티션 A는 10–499999, 파티션 B는 500000–999999를 얻습니다. 각 파티션에는 독립적 인 파일 시스템이 있으며 각 파티션 내의 파일 시스템 은 외부의 데이터를 참조 할 수 없으며 파티션 경계를 넘을 수 없습니다. (예 : 파티션 A 섹터 # 600000에 데이터가 보관 된 파일을 가질 .

결과적으로, 한 파일에서 다른 파일로 이동하는 모든 파일을 완전히 복사해야합니다.

(이론에 따르면 OS는 디스크를 주 메모리에 복사 한 다음 다시 복사하지 않고도 디스크 자체에서 한 영역에서 다른 영역으로 데이터를 복제 하도록 요청할 수 있습니다 (예 : "copy LBA # 1234 to # 567890"). 물론 이것은 파티션 경계를 완전히 우회 할 수 있습니다. 예를 들어 SSD의 "플래시 변환 계층"을 사용할 수 있지만 실제로는 아는 한 그렇게되지 않습니다.)


당신 말이 맞아요 그러나,이 것을 알 수 있다 또 다른 옵션을 선택합니다. 드라이브는 드라이브 # 1의 섹터 # 001이 이제 드라이브 # 2의 섹터 # 123으로 전환되도록 결정할 수 있습니다 (즉, 드라이브 # 1의 섹터 # 001은 이제 섹터 # 123으로 참조되었던 물리적 데이터를 참조 함) 드라이브 # 2) 바이트를 복사 할 필요없이 파일을 이동합니다 . 따라서 데이터의 TB를 이동하는 원칙적으로 거의 순간적.
ispiro

15
드라이브는 파일이나 파일 시스템에 대해 알지 못하므로 스스로 결정할 수 없습니다. 이를 위해서는 OS로부터 요청을 받아야합니다. 마지막 단락에서 이미 언급했듯이 확실히 기술적으로 가능하지만 운영 체제는 일반적으로 파일 시스템 간 복사를 위해 이것을 귀찮게하지 않으며 동일한 파일 시스템 복사본을 위해 그렇게하지 않습니다 (더 일반적으로 FS 수준에서 수행됨).
grawity

6
특정 SSD는 블록 수준 중복 제거를 구현합니다. 예를 들어 Sandforce ( en.wikipedia.org/wiki/SandForce#Technology )는이를 구현 한 첫 번째 중 하나였으며 컨트롤러는 여러 SSD 제조업체의 제품에 적용되었습니다. Sandforce 컨트롤러는 "쓰기 증폭"계수가 1보다 작습니다. 즉, OS가 드라이브로 전송 한 것보다 플래시 스토리지에 적은 데이터를 썼습니다. 이에 비해 SSD는 일반적으로 쓰기 증폭기 계수가 1보다 큽니다.
hojusaram

2
@hojusaram : 맞습니다. 그러나 여전히 포스트-후 중복 제거 – 플래시 쓰기를 줄이지 만 데이터를 여전히 읽고 디스크에서 OS 메모리로 복사 한 다음 다시 디스크 컨트롤러로 복사합니다. ispiro는 OS가 명시 적으로 디스크 자체적으로 수행하도록 요청할 수있는 "reflink"또는 "write on write"(예 : cp --reflink)와 같은 SSD라고 생각합니다.
grawity

1
파티션 경계가 더 이상 고정되어 있지 않으므로 사용자의 개입없이 변경할 수 있기 때문에 APFS가이를 어떻게 처리하는지 알아내는 것이 흥미로울 것입니다.
Tetsujin

9

데이터가 솔리드 스테이트 디스크에 기록 될 때 발생 하는 일은 매우 복잡하고 기본 기술에 의존하기 때문에 여러 기사 ( 여기서 좋은 요약 )에 해당합니다. 짧은 이야기는 SSD는 일반적으로 메모리에 0 비트를 쓸 수 없다는 것입니다. 대신 메모리의 전체 섹션을 제로화 (삭제) 한 다음 데이터를 쓰면 그 후에 데이터를 저장할 수 있습니다. 일반적으로 요즘에는 512 바이트의 블록 을 쓰지만 페이지를 지 웁니다. 8 블록 는 4096입니다. 이것은 각 쓰기 / 삭제주기가 메모리의 물리적 마모를 유발하고 메모리가 결국 마모되어 SSD를 매우 다르게 만든다는 사실 자기 HDD를 회전시키는 것보다.

SATA 드라이브 (및 AFAIK SAS 드라이브)는 한 섹터에서 다른 섹터로 데이터를 복사하는 기본 명령을 구현하지 않습니다. (또는 SATA 또는 SAS 사양에서 요구하는 사항이 하나도 없으므로 OS는 사용 가능한 명령을 신뢰할 수 없습니다.) 따라서 파티션을 가로 지르는 파일 복사는 하나의 드라이브 섹터에서 호스트 메모리로 데이터를 읽은 다음 쓰기를 포함합니다. 다른 섹터의 드라이브로 다시 출력됩니다.

OS에 관한 한, 드라이브는 일련의 번호가 지정된 논리 섹터이며 섹터에서 읽고 섹터에 쓰면됩니다. OS가 드라이브에 섹터를 다시 매핑하도록 지시 할 수 없습니다.

또한 파일 시스템 (HFS +, NTFS, ext3 등)은 일련의 논리 블록에 순서를 부과하는 일련의 데이터 구조입니다. 이러한 데이터 구조는 "파일", "파일 이름", "디렉토리", "권한"등을 구현합니다. 따라서 한 디렉토리에서 다른 디렉토리로 파일을 이동할 때 파일이 복사되지 않습니다. 파일이있는 디렉토리를 나타내는 파일 시스템 데이터 만 업데이트됩니다.

파티션 의 개념은 단일 파일 시스템이 요구하는 드라이브의 논리 섹터 세트라는 것입니다. 이에 대한 파일 시스템은 파일 시스템이 파티션 외부의 섹터에 액세스 할 수 없다는 것입니다. 대체로 이것은 안전 기능이지만 파일 시스템의 데이터 구조는 파일 시스템 소유권 하에서 드라이브의 모든 섹터에 대한 계정을 중심으로 구축되어 있으며 섹터를 추가하거나 제거하는 것이 쉽지 않다는 사실에서 나옵니다. 그 구조에. 그렇기 때문에 파티션 크기를 조정하기 위해 특수 루틴을 실행해야하고 파일 시스템이 연속적인 섹터 세트에서 실행해야하는 이유도 있습니다.

따라서 한 파일 시스템에서 다른 파일 시스템으로 섹터를 전송하는 것처럼 파일 사본을 구현하는 것은 비현실적이고 위험합니다. 회전하는 자기 드라이브에서는 드라이브가 불량 섹터를 예외로 만들지 만 일반적으로 연속 번호가 매겨진 읽기 및 쓰기 속도를 최적화하는 방식으로 섹터를 물리적으로 배치하기 때문에 성능 악몽이 될 수 있습니다. 부문.

또한, 2 개의 파일 시스템이 디스크에 파일 데이터를 같은 방식으로 저장하지 않을 수 있습니다. 즉, 스왑 섹터는 실용적이더라도 작동하지 않습니다. NTFS와 같이 파일 시스템 유형이 완전히 동일한 경우에도 암호화 또는 압축을 사용하고 다른 하나는 데이터를 암호화하지 않지만 다른 키를 사용하여 암호화 할 수 있습니다. 파일의 데이터가 디스크에 저장된 것과 정확히 일치 할 필요는 없으며, 저장해야하는 모든 데이터는 가역적 인 데이터 변환이므로 파일 시스템은 다음 작업을 수행하여 파일의 데이터를 가져올 수 있습니다. 디스크의 데이터. 따라서 두 파일 시스템이 정확히 동일한 변환을 사용하지 않는 경우 단순히 섹터를 바꾸는 것만으로는 파일 데이터 전송의 목표를 달성 할 수 없습니다.

이러한 모든 이유 때문에, OS 기록기 및 파일 시스템 기록기가 SSD의 파티션 간 이동을 최적화하는 기능을 구현하기에는 너무 적은 이득을 얻기에는 너무 많은 작업이 필요합니다. 따라서 모든 파티션 간 이동은 읽기 및 쓰기가됩니다.

SSD 내부에서는 약간 다른 이야기입니다. OS가 드라이브에 데이터를 한 곳에서 다른 곳으로 복사하고 있다고 말하지 않았지만 SSD 쓰기는 너무 비싸고 복잡하기 때문에 SSD 컨트롤러는 쓰기를 최소화하기 위해 많은 작업을 수행합니다. 일부 SSD는 스토리지에 기록되는 섹터가 이미 저장된 섹터와 일치하는 시점을 감지하여 물리적 드라이브를 복사하지 않고 2 개의 다른 논리 섹터에 맵핑하는 것으로 표시합니다. 내부 드라이브 레벨에서 OS는 할 수 없었습니다.

그러나 그것에 의존하지 마십시오.


1
마지막 단락이 파일 시스템이 동일해야 함을 의미하지 않습니까? SSD가 어떤 파일 시스템이 실행되고 있는지 알지 못한다고 가정합니다. 예를 들어 한 파티션이 압축을 사용하고 다른 파티션은 압축을 사용하지 않으면 SSD의 사본이 파일을 손상시킬 수 있습니다.
blablabla

@blablabla 마지막 단락은 두 파일 시스템이 실제 파일 내용을 변경없이 디스크에 저장한다고 가정합니다. 나는 그것을 명백하게했다.
Old Pro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.