나는 머리가없는 pi에서 네트워킹을 잃어 버렸을 때를 제외하고 는 pi를 올바르게 뽑아 버리는 의미에서 pi를 뽑는 습관을 들이지 않습니다 .
일반적으로 나는 항상 그 시점에서 녹색 ACT 표시등이 켜져 있지 않은지 확인합니다. 최근 모델 (또는 펌웨어?)의 경우 SD 카드에 액세스하지 않으면 꺼집니다. 당신이 확인하고 싶은 것입니다. 끊임없이 글을 쓰지 않는 한, 이것은 간단해야합니다. 사용 가능한 RAM에 충분한 양의 여유 공간 (컨텍스트에 따라 50-100 + MB)이있는 한 자주 재사용되는 경향이 있지만 주어진 순간에 프로세스에 의해 실제로로드되지 않는 것들 가용 메모리 에 캐시되어 실제 물리적 매체가 아닌 OS에 의해 다시로드됩니다. 이것이 현대의 모든 범용 운영 체제가 작동하는 방식입니다.
pi가 SD 카드를 사용하는 경우 위험은 최소한입니다 . 카드의 파일 시스템이 메모리 상태와 동기화되지 않은 것입니다. 일반적으로 이것은 큰 문제가 아닙니다. 우선, 대부분의 pis에서 기본적으로 사용되는 파일 시스템 저널링 은 파일 시스템이 완전히 마운트 해제되지 않은 경우 부팅시 자동으로 적용되는 fsck 와 같이이를 방어 할 수 있습니다 . 이 문맥에서 나는 종종 그렇지 않을 수도 있다고 생각하기 때문에 왜 내가 "그렇다"고 말하지 않는지 설명 할 것이다 .
내가 아는 한, 플러그를 뽑을 때 파일 시스템이 손상되거나 데이터 손실이 발생하지 않았습니다. 수년 동안 수백 번 이상 수행했을 수도 있습니다. 그러나 다시는 습관적으로하지 않습니다. 하루에 여러 번 그렇게하면 결국 통계적 위험 수준이 무엇이든 될 수 있으며 잠재적으로 불쾌한 문제가 발생할 수 있습니다.
문제는 다음과 같습니다.
최근에 OS / 파일 시스템 메커니즘이 강력하지 않을 수있는 SD 카드에 문제가 있으며 일부 사람들, 특히 시스템에 관계없이 코드를 잡아 당기는 사람들에게 fs 손상과 관련하여 지속적인 문제가있는 이유를 설명 할 수 있습니다 상태-예를 들어 최근에 누군가가 손상으로 인해 시스템이 부팅 할 수없는 컴퓨팅 모듈을 실행한다고 주장했습니다.
추상적 인 용어 로 SD 카드의 특성을 고려 하지 않고 시스템이 사용 중이더라도 발생하지 않아야합니다. 손상 될 가능성이 가장 큰 것은 실제로 작성된 시스템 소프트웨어가 아니라 중요하지 않은 내용이기 때문입니다. 읽기 전용이며 업데이트 중에 만 변경됩니다.
비트가 저글링되는 경우 발생할 수 있으므로 다양한 비트가 손상된 위치를 저장하는 파일 시스템 메타 정보입니다. 그러나 저널링과 fsck는이를 처리 할 수 있어야합니다. 커널을 부팅해야 하지만 pi의 커널은 별도의 부팅 파티션에 있으며 사용 중에 마운트 해제 될 수도 있습니다 (업데이트 할 때 제외). 시스템이 부팅 된 후에는 사용 되지 않습니다 . 파티션에 대한 정보는 마운트 된 상태에서도 효과적으로 손상되지 않아야합니다.
그러나...
SD 카드는 운영 체제의 블랙 박스입니다. 그 방법은 없습니다. 컴퓨터 하드웨어의 일부인 SD 카드 컨트롤러를위한 특정 드라이버가 있지만 (pi의 경우 SoC의 일부 임) 다른 특정 제조업체 및 카드 모델 용 드라이버와 같은 것은 없습니다.
그러나 그들 모두는 매우 다른 방식으로 작동 할 수있는 마이크로 컨트롤러를 가지고 있습니다. 1. 이것이 카드를 블랙 박스로 만드는 것입니다. 표준화 된 SD 프로토콜을 통해 운영 체제와 상호 작용하며 이는 OS가 제어하는 마지막 지점입니다.
기존의 회전 디스크와 다른 SD 카드 및 기타 솔리드 스테이트 미디어가하는 일 중 하나는 불투명 한 가상 주소 지정을 사용하는 것입니다. 운영 체제가 인식하는 순서대로 물리적으로 정보를 저장하지 않습니다. 이것은 대부분 좋은 일입니다. 그렇지 않으면 다른 브랜드의 카드 등에 대해 다른 드라이버가 필요할 수도 있습니다. 또한 카드가 마모 레벨링 을 (불투명하게) 구현 하여 수명을 크게 연장시킵니다.
그들이 의존하는 또 다른 것은 상대적으로 큰 "블록 지우기"입니다. 블록의 데이터를 변경해야 할 경우 전체 블록 이 지워지고 다시 기록됩니다. 파일 시스템도 물론 이런 종류의 일을하지만 시스템 소프트웨어 수준에 있으며, 그로 인한 문제는 정확히 저널링 및 fsck
처리 문제의 종류입니다 .
더 극복하기 어려운 문제의 핵심은 스케일 파일 시스템이 수행하는 스케일 파일 시스템이 스케일 SD 카드가 수행하는 것보다 훨씬 작다는 것입니다. 그렇지 않은 경우 파일 시스템 블록은 한 파일의 데이터 만 포함 할 수 있기 때문에 상당한 저장 공간을 낭비하게됩니다. 블록이 2MB이고 몇 kB의 데이터 만있는 경우 나머지는 낭비됩니다. 따라서 파일 시스템 블록의 범위는 1/2 KiB ~ 4 KiB입니다.
SD 카드의 컨트롤러는 "파일", "파일 시스템"또는 "장치 파티션"과 같은 경계를 인식하지 못하기 때문에 SD 카드가이를 수행하지 못하는 것은 명백한 사실입니다. 그것은 물리적 인 수준 에서 어떤 일이 일어날 수 있는 블랙 박스 내부의 불투명 레이어를 통해 OS가 원하는 데이터 덩어리를 처리합니다 .
명백한 이유 중 하나 (전제 카드를 제외하고는 "처음에는 그렇게 할 수 없었습니다")는 블록이 매우 크지 만 카드가 모든 공간을 활용하는 적절한 작업을 수행하는 것 같습니다. 소거 블록의 크기는 몇 메가 바이트 일 수 있습니다 . 또한 세부 사항은 독점적입니다. OS가 카드에서 지우기 블록 크기를 요청할 수있는 메커니즘이있을 수 있지만, 카드가이를 제공 할 필요는 없으며, 카드에 대해 거짓말을 할 수 있으며, OS가이를 활용하려고 시도하면 터무니 없게됩니다.
그 이후로는 다음과 같습니다.
SD 카드 컨트롤러는 일관된 파일 시스템 및 패리티와 관련하여 어떤 데이터가 "정확하게"속하는 지에 대한 개념이 없으며,
SD 카드는 OS가 실제로 볼 수없는 블랙 박스입니다.
그런 다음 카드가 4 KiB 이하의 파일 시스템 블록을 사용하는 여러 개의 파티션을 포함하는 지정된 1MB 소거 블록의 내용은 카드가 충분히 사용되면 (그리고 아마도 많이 사용되지 않더라도) 임의적이어야합니다. 모두). OS가 더 큰 / 해당 블록 크기를 사용하도록하려는 경우에도 마찬가지입니다. 그들은 잘못 정렬됩니다.
그래서:
SD 카드가 블록을 변경의 중간에있는 동안 전원이 차단 인 경우, 그 수 임의의 데이터의 상당히 큰 볼륨의 손실이 발생할 수 있습니다 아무것도 카드에서. "읽기 전용"으로 표시된 정보 일 수 있습니다. 마운트되지 않은 파티션의 정보 일 수도 있고 , 대부분 사용되지 않는 부팅 파티션의 정보 일 수도 있습니다.
그 일이 발생하고 카드에 자체 보호 시스템이없는 경우 (일부는 가지고 있지만 가장 확실하지 않은 경우) FUBAR 상황을보고있을 수 있습니다. 저널링은 파티션 경계를 인식하지 못하는 임의의 MB 크기 손상으로부터 보호하지 않습니다. 또는 fsck.
또는 카드의 하드웨어는 일반적으로 독점적이므로 카드 제조업체에서 생산 한 소프트웨어를 제외하고는 그럴듯하다고 생각할 수 있습니다. 그런 말을 들어 본 적이 없습니다. 이것은 카드를 더 복잡하고 비싸며 사용하기가 더 번거로울 것입니다. 어떤 목표가 아닙니다.
달리 말하면, SD 카드 는 이러한 방식으로 안정적으로 사용되도록 고안되지 않았습니다 . 그것들은 싸고 매우 편리하지만 그것은 프로토콜의 절충의 결과입니다. 일반적으로 카드의 전원을 임의로 죽이면 카드의 어떤 데이터에 대해서도 데이터 무결성을 보장 할 수 없습니다.
Pi를 뽑으면 무엇이 잘못 될 수 있습니까? 간단히 플러그를 뽑아야합니까? 참고 :이 경우 데이터 손실에 대해 너무 걱정하지 않습니다.
"데이터 손실"은 "재사용 할 수없는 카드"로 확장되어 완전히 다시 포맷해야한다는 점에 유의하십시오. 그러나 녹색 ACT 표시등이 꺼져있는 상태에서 작업 할 경우 매우 낮을 가능성이 높습니다.
- 일부 특정 제조업체 / 카드 모델이 다른 사람들보다 명확하게 공정한 이유를 고려할 때 이는 중요 할 수 있습니다. 불행하게도, 동일하게 라벨링 된 2 개의 카드가 언급 된 특징 (크기, 속도 등)의 관점에서 동일 할 수 있지만, 제조업체는 구성 부품의 관점에서 실제로 100 % 동일하게 만들 수는 없다.