디렉토리의 내용을 디스크 전체에 고르게 배포합니다. 가장 가까운 최상위 디렉토리로 반올림합니다.

디렉토리의 내용을 디스크 전체에 고르게 배포합니다. 가장 가까운 최상위 디렉토리로 반올림합니다.

나는 음악 카탈로그와 2개의 SD 카드 슬롯이 있는 MP3 플레이어를 가지고 있습니다. 이 디렉토리의 내용은 카드 한 장에 담기에는 너무 커서 두 개로 나누고 싶습니다.

나는 물건을 알파벳 순서로 정리하는 것을 좋아합니다. SD1을 채우고 SD2 섹션을 비워두면 새 음악을 추가할 때마다 SD2에 새 항목을 추가하여 알파벳 순서를 깨거나 주변의 모든 항목을 다시 조정해야 합니다.

또 다른 점은 내 카탈로그가 아티스트별로 그룹화되어 있어서 특정 아티스트의 새 앨범을 SD1에 받으면 맞지 않는다는 것입니다.

간단히 말해서, 두 카드 모두 대략 동일한 양의 채우기를 원합니다.

이제 내 솔루션은 실제로 괜찮습니다.

  1. 디렉터리를 나열하고 목록을 파일로 출력합니다.
  2. 파일을 열고 중간 지점을 찾으세요. (이 작업을 수행하는 영리한 방법이 있다고 확신하지만 vim에서 수동으로 수행하는 것이 빠릅니다.)
  3. 목록의 아래쪽 절반을 잘라내어 두 번째 파일에 붙여넣습니다.
  4. rsync --files-from=SD1의 한 파일과 SD2의 다음 파일로 실행합니다. 임무 완료!

하지만 두 SD 카드가 더 균등하게 채워지도록 이 작업을 수행하는 더 정확한 방법이 없을까 하는 생각이 들었습니다. 당신은 무엇을 하시겠습니까?

내 생각엔 내가 해야 할 것 같아

  1. 음악 디렉토리에서 실행 du하여 totalSize.
  2. 그런 다음 각 아티스트 디렉터리를 반복하여 크기를 확인하고 누적 합계를 유지합니다.
  3. 총계를 초과하면 totalSize * 0.5방금 계산한 모든 디렉터리 목록을 출력하여 전반부를 얻고 나머지를 두 번째 파일에 넣어 나머지 절반을 얻으시겠습니까?
  4. 파일에서 동일한 rsync 실행

누구든지 더 좋은 생각이 있나요?

답변1

그래서 다소 아이러니하게도 이것은진짜두 개의 SD 카드가 동일한 네트워크에 있는 두 개의 별도 컴퓨터에 있는 경우 이는 쉽게 수행할 수 있습니다. 필요한 작업을 정확히 수행할 수 있는 다양한 클러스터형 스토리지 솔루션이 있기 때문입니다.

그러나 이것이 매우 현실적인 옵션이 아니라는 점을 고려하면(클러스터 파일 시스템을 사용하는 것은 과잉임) 아마도 최선의 옵션은 mhddfs라는 프로그램일 것입니다. 공식적인홈페이지러시아어로 되어 있지만 좋은 글이 있어요여기그것에 관해서는 다양한 배포판이 패키지로 제공됩니다. 기본적으로 파일 수준 RAID를 수행합니다. 여기서 가장 큰 장점은 mhddfs 마운트를 설정한 후에는 실제로 rsync한 번만 호출하면 된다는 것입니다. 각 파일은 완전히 하나의 파일 시스템에 저장되며 파일 시스템 전반에 걸친 배포를 지능적으로 관리합니다. 또한 기본 장치에 어떤 상태도 저장하지 않으므로(단지 장치의 데이터 분포를 보고 새로 생성된 파일을 저장할 위치를 파악하고 모든 파일에서 기존 파일이 있는지 올바르게 확인함) 데이터 낭비가 없습니다. . 공간도 마찬가지다.

관련 정보