저는 약 2년 동안 여러 장치에서 btrfs를 사용해 왔습니다.
신뢰할 수 없는 섹터가 있는 HDD(단일 디스크)에서 일부 btrfs 구성을 테스트할 계획입니다. 하드 드라이브의 12개 섹터를 읽을 수 없는 경우가 있습니다.
다음 설정에서 데이터 무결성과 전체 읽기 및 쓰기 속도에 차이가 있습니까?
1 TB HDD
-1 TB btrfs partition created with `mkfs.btrfs -d dup -m dup /dev/sda1`
1 TB HDD
-500 GB partition
-500 GB partition
--500 GB btrfs Raid 1 `mkfs.btrfs -m raid1 -d raid1 /dev/sda1 /dev/sda2`
답변1
dup
동일한 장치에 여러 파티션을 배치하고 공격하는 대신 이 변형을 사용하는 것이 좋습니다 . raid 변형은 데이터에 액세스할 때 두 개의 복사본을 읽어야 하기 때문에 좋지 않습니다(두 장치 중 하나가 더 빠르면 데이터를 더 빨리 사용할 수 있으므로 일반적인 다중 장치 raid에 유용합니다). 장치를 회전시키는 단일 장치의 경우 이로 인해 읽기 헤드가 서로 다른 파티션 사이를 이동하게 되므로 대기열에 여러 요청이 있는 경우(흔히 발생하는 경우) 성능이 매우 저하됩니다. 대기열 깊이와 CFQ 스케줄러를 늘리면 전체 대기 시간이 약간 줄어들 수 있지만 이러한 혼동을 피하는 것이 가장 좋습니다.
이 dup
변형은 일반적으로 한 복사본에서만 읽을 수 있을 만큼 정상이어야 하며, 섹터를 읽을 수 없는 경우에만 다른 복사본으로 대체해야 합니다.
dup
구현에 대해서는 잘 모르겠지만 이것이 dup
복제본을 첫 번째 복제본에서 장치의 1/2만큼 이동하지 않으므로 dup
쓰기 성능도 향상될 수 있다고 추측합니다. 하나의 논리적 쓰기 작업은 물리적 회전 장치의 두 위치에 써야 하고 그 차이는 항상 장치의 1/2이므로 실제로 전체를 구현하므로 단일 장치 RAID의 쓰기 성능도 좋지 않습니다. 장치를 회전시키는 알고리즘의 최악의 동작.
답변2
DUP와 RAID1의 차이점은 다음과 같습니다.
- 나처럼 사용하지 않을 때 임의의 섹터를 읽을 수 없다는 SSD가 있는 경우
- 그러면 BTRFS 파티션 헤더에서 읽을 수 없는 섹터 중 하나가 있고 BTRFS는 여기에 저장된 어떤 것도 마운트하거나 읽을 수 없기 때문에 DUP가 패닉 상태가 될 수 있습니다. RAID1을 사용할 때 다른 BTRFS 파티션을 마운트하고(다른 BTRFS 파티션의 헤더에 읽을 수 없는 섹터가 없는 경우) 이를 정리하여 읽을 수 없는 섹터를 다시 쓸 수 있습니다.
- RAID1은 각각 헤더가 있는 두 개의 파티션을 의미하므로 하나의 헤더가 손상되고(파티션을 다시 포맷함) 다른 파티션에 올바른 헤더가 있는 경우 다른 파티션을 마운트하고 성능 저하 모드에서 액세스하여 문제를 해결할 수 있습니다(다른 새 추가 파티션, 누락된 파티션 삭제, RAID1 수준에서 균형 유지)
이제 KingDian SSD에 대한 개인적인 이야기는 오랜 시간(8일 이상) 정전 후 무작위로 읽을 수 없는 섹터가 나타나고 BTRFS RAID1이 해당 SSD를 저장하고 사용하도록 허용하는 방법입니다(읽을 수 없는 섹터 충돌이 발생할 때까지).
우선 BTRFS와 해당 DUP(가까운 미래에 테스트할 예정) 및 RAID1(이미 완벽한 결과로 테스트됨)에 감사드리고 싶습니다. 이를 통해 KingDian 브랜드 SSD를 사용할 수 있습니다. Yucun 및 Samsung 브랜드와 마찬가지로 KingDian 브랜드의 세 SSD 모두에서 "읽을 수 없는 섹터" 문제를 본 적이 없습니다. 총 11개의 SSD를 사용했는데 KingDian 중 하나가 고장나서 지금은 10개만 사용하고 있습니다. 그리고 KingDian 1TiB SSD는 사용하기가 두렵습니다(FAT32 또는 NTFS에서 사용할 계획입니다) TV를 합법적으로 재생하려면 ) H.264/2xAAC로 변환된 DVD를 구입하세요.
KingDian SSD의 문제는 정말 이상하므로 문제를 발견한 방법을 단계별로 알려 드리겠습니다.
- 90% 파티션을 생성하고 포맷하세요. 예전에는 Ext4(Linux)/NTFS(Windows 시스템 파티션)를 사용했지만 Windows를 정말 싫어하지만 어쩔 수 없이 사용해야 했습니다.
- 이 파티션에 시스템을 설치합니다.
- 매일 시스템을 사용하십시오 --> 문제가 표시되지 않습니다
- 정전이 되어 8일 이상 방치 --> KingDian SS 문제
- Live Linux 배포판(DVD/USB/등)으로 부팅할 때 발생하는 문제를 확인하기 위해 주로 SystemRescueCD를 사용하지만 "ntfsclone"/"partclone.*"/"partimage" 또는 일반 "dd"가 포함된 다른 배포판도 사용할 수 있습니다.
- 파티션 복제를 파일로 저장합니다(예: 시스템 파티션을 백업 미디어에 저장).
- 문제가 발생했습니다. 일부 섹터(몇 개에서 25개 또는 30개까지)를 읽을 수 없습니다.
- 나는 읽을 수 없는 섹터를 (종이에) 기록합니다.
- 이제부터 이상한 일이 일어나기 시작하는데 전원을 제대로 끄고 8일 이상 방치해 두는데
- 이제 읽을 수 없는 섹터를 확인하기 위해 4~7단계를 반복합니다. 목록이 많이 변경됩니다. 대부분의 경우 두 목록에 공통점이 없으므로 읽을 수 없는 모든 섹터를 읽을 수 있게 되었고 다른 섹터도 이제 읽을 수 있게 되었습니다. 읽기 섹터를 읽을 수 없습니다.
- SSD에 전혀 쓰지 않고 이 작업을 여러 번 반복할 수 있으며 읽을 수 없는 모든 섹터 목록에는 공통된 섹터가 없는 경향이 있습니다(때로는 섹터가 두 목록에 모두 있음).
이 SSD(KingDian 브랜드만 해당)는 왜 그렇게 추악하고 이상한 일을 합니까? 무작위로 일부 섹터는 장기간 정전(8일 이상) 후에 읽을 수 없었다가 정전 후 일정 기간(8일 이상) 후에 다시 읽을 수 있게 되었다고 말합니다.
가장 이상한 점은 읽을 수 없게 되었다가 다시 읽을 수 있게 된 후에도 항상 올바른 데이터를 가지고 있다는 것입니다.
또한 SMART 데이터를 확인한 결과 새로운 재할당된 섹터가 없다고 했습니다(한때 Windows에서 읽을 수 없는 섹터를 강제로 재할당하는 도구를 사용했기 때문에 일부가 있었습니다).
SMART 메시지에는 읽기 오류가 없다고 나와 있지만 일부 섹터를 읽을 수 없으며 쓰기 오류도 없다고 나와 있습니다.
분명히 "읽기" 오류도 없고 "읽기"된 "잘못된" 데이터도 없습니다... 이는 읽을 수 없는 것과 기술적으로 다릅니다... 그리고 스마트 데이터에는 읽을 수 없는 오류 수를 표시할 수 있는 필드가 없습니다. .등.
그런데 읽을 수 없는 섹터를 데이터로 덮어쓰면 섹터를 다시 매핑하지 않고도 다시 읽을 수 있게 됩니다. 아마도 사용된 내부 섹터가 실패한 섹터가 아니기 때문일 것입니다(최신 SSD를 작성하는 경우 필드를 확장하기 위해 다른 위치를 사용한다는 것을 기억하십시오. SSD는 내부적으로 매핑된 것을 사용합니다). LBA(칩 내부의 실제 위치).
그런데 30GiB의 데이터가 있는 파티션을 복제하는 데는 1분도 채 걸리지 않으며 이 문제가 발생하지 않습니다(SSD는 파티션을 복제하는 동안 550MiB/s에서 지속적으로 읽을 수 있습니다. 즉, 대부분 순차적 읽기입니다). 24시간 이상 걸리며(그러한 오류를 무시하십시오. 그렇지 않으면 종료되지 않습니다) 일부 "손상된" 데이터(읽을 수 없음)가 있을 것입니다.
BTRFS가 나를 구한 곳은 다음과 같습니다.
- 먼저 BTRFS의 RAID1 수준에서 동일한 SSD에 두 개의 파티션을 사용하여 데이터와 메타데이터를 저장했습니다.
- 이제 RAID1 대신 DUP에 대해 알았으므로 테스트에 DUP를 사용하면 매번 두 개의 클론 파티션 백업을 실행하지 않고 하나만 실행하는 것이 좋습니다.
나를 구한 결과는 무엇이었나요? 간단합니다. BackUP 미디어를 복제하기 전에 읽을 수 없는 섹터로 인해 BTRFS가 다른 복사본으로 덮어쓰도록(두 복사본 모두 읽을 수 없는 섹터가 없기를 바랍니다) 동시에 동일한 위치에 복제할 콘텐츠를 삭제합니다. ).
두 개의 파티션을 사용하면 잘 작동하고(느리지만 효과적) 복제된 데이터의 일부 섹터가 손실되지 않습니다. 이제 두 개의 동일한 크기 파티션 대신 하나의 파티션에서 DUP로 테스트해야 합니다. RAID1을 사용하여 테스트했습니다.
백업 시간이 줄어들지는 않지만(추가 시간도 소요됨) 적어도 모든 데이터가 올바른지 확인할 수는 있습니다. 어느 날 동일한 데이터(충돌)에 대해 읽을 수 없는 두 개의 섹터가 나타날 때까지 말이죠. 같은 시간 같은 위치에 있으면 되돌릴 수 없습니다.
다른 옵션은 분명합니다. 더 이상 KingDian SSD를 사용하지 마십시오. 이것은 제가 지금까지 사용한 유일한 SSD로서 이 문제가 있습니다(장기간 정전 후 섹터를 읽을 수 없음).
휴가를 갔다가 집의 주 전원 공급 장치를 끊고 돌아와서 SSD에 읽을 수 없는 부품이 있는 것을 발견했다고 상상해 보십시오! 이는 가정용 사용자에게는 큰 문제이지만 SSD에 항상 전원이 공급되는 데이터 센터에서는 그렇지 않습니다.
훌륭한 BTRFS! ! ! 이제 또 다른 추악한 부분인 NTFS 파티션(Windows 시스템 파티션)으로 유사한 작업을 수행하는 방법에 대해 알아보겠습니다. 전혀 불가능합니다. NTFS에는 이 옵션이 없습니다(SERVERS 등이 아닌 Windows HOME 버전을 기억하십시오).
그래서 BTRFS 덕분에 Linux는 며칠 전 생각했던 것보다 훨씬 나아졌습니다...저는 수십 년 동안 Linux 사용자였습니다...그러나 완전한 손상 등에 대한 모든 나쁜 정보 때문에 BTRFS를 사용하는 것을 거부했습니다. SSD 문제로 인해 중복된 내용이 필요했습니다.
내 마음에 떠오른 또 다른 옵션은 ZFS였습니다. 더 복잡하고 GRUB2 부트로더에 통합되지 않았으며 커널에 통합되지 않았습니다(라이센스 시스템으로 인해 결코 통합되지 않을 수도 있음). 그래서 저는 (어제) BTRFS를 열렬히 시도했습니다. .놀랍게도 매우 안정적이고 비교적 사용하기 쉬운 것 같습니다(새 디스크를 추가할 때 RAID1이 아닌 RAID0에 추가된다는 경고, 저는 RAID5/6/등을 사용하지 않으며 이와 같은 것을 사용하고 싶지 않습니다). 데이터 손실(KingDian SSD가 아닌 경우) 없이 치명적인 손상(두 파티션 중 하나를 다시 포맷)으로부터 쉽게 복구할 수 있습니다.
물론 하위 볼륨, 스냅샷 등을 사용하지 않습니다. 앞서 말했듯이 RAID1의 Linux 루트 "/"로 일반 파일 시스템을 사용하므로 테스트를 위해 RAID1 대신 DUP를 사용해야 합니다. 걱정스럽습니다(매우 편집증적입니다). 파티션 헤더의 읽을 수 없는 섹터는 모든 BTRFS를 복구할 수 없거나 읽을 수 없다는 의미이므로 RAID1의 동일한 SSD에 두 파티션을 모두 보관할 것입니다.
이와 같이 무작위로 읽을 수 없는 섹터 오류가 발생하는 경우 KingDian SSD를 선택할 수 있다면 비용이 절약될 것입니다. 정말 비싸고 크기가 클수록 더 비싼 단일 비트 셀 SSD만 사용하고 싶기 때문에 SSD는 저렴하지 않습니다. (저는 편집증적이라고 말합니다.) 모든 데이터에 대한 10개 이상의 오프라인 백업과 100개 이상의 마지막 상태 기록을 보유하고 있습니다(제가 알아요, 편집증적입니다).
답변3
적어도 한 가지 차이점을 발견했습니다.
다운그레이드된 raid1 rw는 한 번만 마운트할 수 있습니다. 장치의 다른 파티션이 정상일 때 한 파티션에 오류가 발생할 가능성은 낮을 수 있지만 차이가 있습니다.
원천: https://btrfs.wiki.kernel.org/index.php/Gotchas#raid1_volumes_only_mountable_once_RW_if_degraded
다운그레이드하면 raid1 볼륨은 RW에 한 번만 마운트될 수 있습니다.
단일 프로필 블록이 없더라도 성능이 저하된 raid1 볼륨은 -o Degraded,rw 옵션을 사용하여 한 번만 읽기/쓰기로 마운트할 수 있습니다.
노트:
보고에 따르면, 장치 수가 2개를 초과하면 이러한 현상이 발생하지 않습니다.
이는 raid10 프로필 볼륨에서는 발생하지 않습니다.
이는 일반적으로 단일 블록이 남아 있는 "불완전한 블록 변환" 문제로 인해 발생합니다.
가능한 복구:
여전히 읽기/쓰기 상태인 경우 공간이 충분하면 프로필 raid1의 블록을 프로필 단일(또는 프로필 dup)로 변환할 수 있습니다.
여전히 읽고 쓸 수 있는 경우 누락된 장치를 btrfs 장치로 교체할 수 있습니다.
어떤 이유로든 raid1 볼륨이 읽기 전용 상태가 되면 해당 콘텐츠를 덤프하고 다시 생성한 후 콘텐츠를 복원해야만 복구할 수 있습니다.
답변4
파티에 늦었지만 어쨌든요. 나는 (dup에 대해) 내가 읽은 사람들 중에서 같은 문제에 대해 궁금했습니다.
"예를 들어 SSD 드라이브는 내부적으로 블록을 단일 복사본으로 다시 매핑하여 중복을 제거할 수 있습니다. 이는 중복성을 추가하려는 목적을 상실하고 공간 낭비일 뿐입니다."
어쩌면 raid1은 이 문제를 피할 수도 있고 피할 수도 있습니다.