플러그를 뽑는 것만으로도 괜찮습니까?


18

내 pi를 끌 때마다 sudo poweroff(내 이해로는) 모든 프로세스를 중지하고 종료하는 안전한 방법을 사용합니다.

Pi에 항상 SSH 연결을 사용하지 않는 임베디드 프로젝트에 Pi를 사용하는 경우가 있지만 전화 또는 랩톱을 꺼내 Pi에 연결하여 전원을 끄는 데 시간이 낭비되는 경우가 종종 있습니다.

내가 말한 일부 사람들은 그들이 셧다운하고 싶을 때 전원 리드를 뽑아 내고 이것에 어떤 문제도 느끼지 못했다고 말했습니다.

그렇다면 Pi를 뽑으면 무엇이 잘못 될 수 있습니까? 간단히 플러그를 뽑아야합니까?

참고 :이 경우 데이터 손실에 대해 너무 걱정하지 않습니다. 정기적 인 백업을 저장하는데이 Pi의 중요한 데이터는 GitHub에 있습니다.


1
전원 코드를 계속 꽂고 뽑으면 Pi의 커넥터 수명이 단축됩니다. 둘째, 플러그를 뽑을 때 SD 카드가 작업을 수행하는 중일 수 있습니다. 플러그가 손상 될 수 있습니다. 데이터를 얼마나 잘 백업하든 관계없이 불편할 것입니다.
다스 베이더

2
@DarthVader '커넥터 수명 단축'이란 무엇입니까? 더 이상 플러그를 꽂거나 꽂지 않을 것입니다. 셧다운 전에 그냥 뺄 것입니다. SD 카드를 손상시키는 것 외에 다른 문제가 있습니까? SD 카드를 포맷하면 항상 카드를 다시 사용할 수 있습니까?
James Vickery 2016 년

1
나는 여전히 Pi를 꽂아두고 벽의 전원을 끄는 것이 더 낫다고 생각합니다. 선택한 OS를 포맷하고 다시 설치하여 손상된 SD 카드를 복구 할 수 있지만, 우선 SD 카드의 손상을 피하는 것이 좋습니다. 또 다른 문제는 Pi의 일부가 무언가를 수행하는 과정에있을 수 있으며, 그들이하고있는 일을 마칠 수있는 기회를주지 않으면 서 힘을 줄였습니다.
다스 베이더

답변:


23

나는 머리가없는 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가이를 활용하려고 시도하면 터무니 없게됩니다.

그 이후로는 다음과 같습니다.

  1. SD 카드 컨트롤러는 일관된 파일 시스템 및 패리티와 관련하여 어떤 데이터가 "정확하게"속하는 지에 대한 개념이 없으며,

  2. SD 카드는 OS가 실제로 볼 수없는 블랙 박스입니다.

그런 다음 카드가 4 KiB 이하의 파일 시스템 블록을 사용하는 여러 개의 파티션을 포함하는 지정된 1MB 소거 블록의 내용은 카드가 충분히 사용되면 (그리고 아마도 많이 사용되지 않더라도) 임의적이어야합니다. 모두). OS가 더 큰 / 해당 블록 크기를 사용하도록하려는 경우에도 마찬가지입니다. 그들은 잘못 정렬됩니다.

그래서:

SD 카드가 블록을 변경의 중간에있는 동안 전원이 차단 인 경우, 그 수 임의의 데이터의 상당히 큰 볼륨의 손실이 발생할 수 있습니다 아무것도 카드에서. "읽기 전용"으로 표시된 정보 일 수 있습니다. 마운트되지 않은 파티션의 정보 일 수도 있고 , 대부분 사용되지 않는 부팅 파티션의 정보 일 수도 있습니다.

그 일이 발생하고 카드에 자체 보호 시스템이없는 경우 (일부는 가지고 있지만 가장 확실하지 않은 경우) FUBAR 상황을보고있을 수 있습니다. 저널링은 파티션 경계를 인식하지 못하는 임의의 MB 크기 손상으로부터 보호하지 않습니다. 또는 fsck.

또는 카드의 하드웨어는 일반적으로 독점적이므로 카드 제조업체에서 생산 한 소프트웨어를 제외하고는 그럴듯하다고 생각할 수 있습니다. 그런 말을 들어 본 적이 없습니다. 이것은 카드를 더 복잡하고 비싸며 사용하기가 더 번거로울 것입니다. 어떤 목표가 아닙니다.

달리 말하면, SD 카드 는 이러한 방식으로 안정적으로 사용되도록 고안되지 않았습니다 . 그것들은 싸고 매우 편리하지만 그것은 프로토콜의 절충의 결과입니다. 일반적으로 카드의 전원을 임의로 죽이면 카드의 어떤 데이터에 대해서도 데이터 무결성을 보장 할 수 없습니다.

Pi를 뽑으면 무엇이 잘못 될 수 있습니까? 간단히 플러그를 뽑아야합니까? 참고 :이 경우 데이터 손실에 대해 너무 걱정하지 않습니다.

"데이터 손실"은 "재사용 할 수없는 카드"로 확장되어 완전히 다시 포맷해야한다는 점에 유의하십시오. 그러나 녹색 ACT 표시등이 꺼져있는 상태에서 작업 할 경우 매우 낮을 가능성이 높습니다.


  1. 일부 특정 제조업체 / 카드 모델이 다른 사람들보다 명확하게 공정한 이유를 고려할 때 이는 중요 할 수 있습니다. 불행하게도, 동일하게 라벨링 된 2 개의 카드가 언급 된 특징 (크기, 속도 등)의 관점에서 동일 할 수 있지만, 제조업체는 구성 부품의 관점에서 실제로 100 % 동일하게 만들 수는 없다.

1

OS 작업 계획에 크게 의존합니다.

  • 표준 구성표를 사용하는 경우 실제 데이터에 대해 r / w 모드에서 SD 카드를 사용하는 경우 (스왑 파티션 은 여기에 포함되지 않음) 일반적인 "PC 전원 연결"사례와 같은 문제입니다. : Google 주변에 있으므로이 사건에 대한 수많은 정보를 얻을 수 있습니다. 동일한 문제, 동일한 위험 및 동등한 영향입니다.
  • SD 카드에서 데이터읽는 경우 , 즉 SD 카드에서 모든 데이터 포함 파티션을 ro옵션으로 마운트 하는 경우 플러그를 뽑는 것만으로는 아무런 문제가 없습니다. 서비스 작업을 마치는 중입니다. 외부 쓰기 가능 스토리지 (예 : NAS 또는 NFS / SMB / CIFS 공유)에 데이터를 백업하고 서비스가 종료 된 후 플러그를 뽑기 만하면됩니다. RAM / tmpfs 디스크가 필요하지 않습니다. ) 더 이상 아무것도 손상 시키지 않습니다.

1
첫 번째 요점이 잘못되었습니다. SD 카드는 저널링 및 검사가 대부분의 시간 동안 효과적으로 보호되어야하는 디스크 회전 또는 추가 하드웨어가있을 수있는 더 비싼 SSD 미디어와 같이 "정확하게 동일하지 않은"문제를 야기하는 합병증을 유발합니다. SD 미디어에 비해 더 엄격한 표준. Qv "SD 카드의 특성을 고려하지 않고 추상적 용어로 ..."
goldilocks

1
@goldilocks는 물론 스토리지 미디어 역학의 심오한 차이가 있습니다. 나는 여기서 더 일반적으로 말하고있다. "모든 데이터가 안전하고 확실하게 저장된다는 사실을 확신하지 못하면 왜 플러그를 뽑는 것이 나쁜가?"
Alexey Vesnin

@goldilocks 훌륭한 답변에 감사드립니다. 나는 goldilocks의 답변을 수락하기로 결정했지만 둘 다 훌륭한 지적을했습니다. 왜냐하면 그것은 여전히 ​​질문에 대답하면서 많은 관련 정보를 제공하기 때문입니다. 그러나 두 가지 대답을 모두 찬성했습니다.
James Vickery

1

@goldilocks가 대답했듯이 위험은 거의 없지만 대부분의 사람들은 그렇게하지 않습니다.

헤드리스 Pi에서 사용하는 안전한 전원 끄기 스위치를 추가하는 것은 매우 간단합니다. Raspberry Pi를 안전하게 끄는 방법을 참조하십시오 . 이것은 약간의 RAM과 간단한 푸시 버튼 외에 거의 리소스를 사용하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.