나는 얼마 전에 소프트웨어 병렬성에 대해 배웠습니다.https://forums.servethehome.com/index.php?threads/mdadm-create-raid-0-quick-format.41161/#post-389210
이제 내 목표는 예전과 거의 같지만, 다른 방식으로 해보고 싶다.
내가 가지고 있는 설정은 다음과 같습니다.
단일 포트 SAS2 HBA를 갖춘 Dell SFF 데스크탑
총 14개의 NetApp SAS3 디스크 쉘프
Disk Shelf당 24개의 960GB 12G SAS SSD 설치
드라이브는 520 섹터 크기를 실행합니다.
목표는 모든 드라이브에서 sg_format --format -e /dev/sgXX를 가급적 병렬로 실행하는 것입니다.
하나씩 수행할 수 있지만 병렬성을 사용하여 그 기능을 이해하고 모든 유사한 향후 프로젝트에서 이 작업을 더 빨리 수행하고 싶습니다.
저는 Ubuntu 23.10을 사용하고 있으며 Universe 저장소를 추가하고 apt update와 apt install을 병렬로 사용했습니다. 이제 Parallel이 sg3-utils 및 smartmontools와 함께 설치됩니다.
내 HBA는 128개의 장치를 처리할 수 있습니다. 여기서 장치 1(또는 0)은 HBA 자체이므로 체인에서 총 5개의 Disk Shelf가 실행됩니다. 즉, 120개의 드라이브가 연결되어 있다는 의미입니다. /dev/sg2에서 시작하여 /dev/sg126에서 끝납니다.
내가 사용하는 명령은 다음과 같습니다:parallel sg_format --format -e ::: /dev/sg[2-126]
실행할 때 터미널이 몇 초 동안 정지되는데, 이는 예상되는 현상입니다.
그러나 실제로는 /dev/sg2 및 /dev/sg6만 실행 중입니다. 아래 이미지를 참조하세요.
모든 드라이브는 동일하지만 그 중 2개만 실제로 포맷을 시작하려고 합니다. 오류나 시작되지 않는 이유가 없습니다.
드라이브를 "수동"으로 부팅하려고 했기 때문에 sg_format 명령만 사용하면 모든 드라이브가 제대로 부팅되었습니다.
명령을 실행하면
병렬 sg_format --format -e ::: /dev/sg[2-10]
/dev/sg2에서 sg_format을 실행한 다음 /dev/sg0에서 이 두 가지만 실행합니다.
물론 여러 장치에 입력하는 데 문제가 있습니다.
아는 사람 있나요?
답변1
이는 /dev/sg[2-126]
범위를 사용하고 있기 때문입니다. 안타깝게도 범위는 여러 자릿수를 처리할 수 없습니다. 그들은특징범위이며 126
문자가 아닙니다. 따라서 가질 수는 있지만 "0에서 1까지의 문자, 그 다음에는 0의 문자"를 의미하기 때문에 [0-9]
가질 수 없습니다 . [0-10]
따라서 귀하의 것은 실제로 "2와 1 사이의 숫자"를 의미합니다. 이는 2가 1 뒤에오고 특정 숫자 sum [2-126]
이기 때문에 의미가 없습니다 . 그렇기 때문에 합계 만 일치시킵니다 .2
6
sg2
sg6
따라서 첫 번째 명령 은 및 에서 실행 parallel sg_format --format -e ::: /dev/sg[2-126]
됩니다 . 두 번째 명령은 에서 실행되며 와 및 사이에 다른 문자가 없으므로 단일 문자로 해석되고 그 자체로 처리됩니다.sg2
sg6
parallel sg_format --format -e ::: /dev/sg[2-10]
/dev/sg2
/dev/sg0
[2-1]
2
2
1
0
당신이 원하는 것은 사용하는 것입니다버팀대 확장대신에:
parallel sg_format --format -e ::: /dev/sg{2..126}
또는 한 번에 최대한 많은 작업을 실행하려면 다음을 사용하세요.
parallel -j0 sg_format --format -e ::: /dev/sg{2..126}