PowerFlex: PowerFlex SDC 드라이버의 온디맨드 컴파일
Summary: 이 기술 자료 문서에서는 Linux 시스템에서 PowerFlex SDC 드라이버의 온디맨드 컴파일을 활성화하는 방법에 대해 설명합니다.
Instructions
이 기능은 Linux 커널의 ABI(Application Binary Interface) 변경 사항을 수용하기 위한 것입니다. 이로 인해 다른 커널용으로 미리 컴파일된 SDC 드라이버가 로드되지 않을 수 있습니다.
지금까지 Linux용 SDC 설치 패키지(RPM/DEB)에는 해당 Linux 배포판의 다양한 커널에 대한 여러 SDC 커널 모듈이 포함되어 있었습니다. 커널 업데이트를 자주 릴리스하는 Ubuntu와 같은 배포판에 설치하는 사용자의 경우 Dell의 SDC 드라이버 원격 리포지토리에 연결하고 SDC 다운로드를 시도하도록 SDC 서비스를 설정하는 옵션이 있습니다.
새로운 기능을 통해 사용자는 드라이버 리포지토리에 일치하는 SDC가 있는지 여부에 의존하지 않고도 실행 중인 커널에 대해 SDC 드라이버와 완벽하게 일치하는 드라이버를 컴파일할 수 있습니다.
대상: 보안상의 이유로 커널을 자주 업데이트하고 특수 사용자 지정 커널을 실행하는 사용자는 이 기능의 이점을 누릴 수 있습니다.
필수 구성 요소
컴파일 절차가 성공하려면 SDC 서비스의 호스트에 다음 패키지가 설치되어 있어야 합니다.
- GNU C 컴파일러(GCC)의 최신 버전인 GCC
- GNU make(1).
- 실행 중인 커널에 대한 커널 개발 패키지입니다. 이 패키지는 일반적으로 다음과 같은 이름으로 사용할 수 있습니다.
- kernel-devel을 사용하여 RPM 패키지 관리자를 사용하는 배포판에 사용할 수 있습니다. (Red Hat, SUSE 등)
- Debian 패키지 관리자(Debian, Ubuntu 등)를 사용하는 배포판용 linux-headers
주문형 자동 컴파일
SDC 드라이버의 필요 시 자동 컴파일을 허용하려면 호스트가 위의 사전 요구 사항 섹션에 나열된 사전 요구 사항을 모두 충족해야 합니다. SDC 드라이버를 가져올 때 SDC 서비스는 다음 조건이 모두 충족되는 경우 SDC 드라이버를 컴파일하려고 시도합니다.
-
실행 중인 커널과 일치하는 SDC를 드라이버 캐시에서 사용할 수 없습니다.
드라이버 캐시에 대한 자세한 내용은 아래의 드라이버 캐시를 참조하십시오. -
이름이 지정된 파일
/etc/emc/scaleio/scini_sync/.build_scini존재.
파일의 내용은 무시됩니다. 그러나 사용자는 향후 개선 사항을 위해 비워 두어야 합니다.
파일을 실행하면 만들 수 있습니다.touch(1)명령을 사용합니다.
수동 컴파일
SDC 드라이버를 사용하는 경우 컴파일 호스트는 위의 사전 요구 사항 섹션에 나열된 사전 요구 사항을 모두 충족해야 합니다.
SDC 드라이버를 수동으로 컴파일하려면 다음 단계를 따르십시오.
-
컴파일 번들을 드라이버 캐시의 해당 디렉토리에서 임시 디렉토리로 복사합니다. 번들의 위치는 PowerFlex 버전 및 Linux 배포판에 따라 다릅니다.
예를 들어 Red Hat Enterprise Linux 9 기반 배포판의 경우 PowerFlex 3.6.3 SDC의 번들은 다음과 같습니다./bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
드라이버 캐시에 대한 자세한 내용은 아래의 드라이버 캐시를 참조하십시오. -
임시 디렉토리로 이동하여 컴파일 번들의 압축을 풉니다.
예:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
다음의
build_driver.sh추출된 콘텐츠의 최상위 수준에 있는 스크립트입니다. 인수가 없으면 스크립트는 실행 중인 커널에 대한 드라이버를 컴파일하려고 시도합니다.
다른 커널에 대해 컴파일하려면 해당 커널의 헤더 디렉토리 경로에 "-o" 및 "-s" 명령줄 인수를 사용합니다.
호출에 대한 자세한 내용을 보려면 다음을 실행합니다.build_driver.sh -h
-
컴파일 프로세스 출력은 표준 출력으로 인쇄됩니다.
컴파일에 성공하면 결과 SDC 드라이버 파일인 scini.ko를 다음 위치에서 찾을 수 있습니다../ini/scini.ko. -
드라이버 파일을 컴파일 호스트에서 타겟 SDC 호스트로, 드라이버 캐시에서 컴파일 번들과 동일한 위치에 있는 타겟 커널 버전과 일치하는 디렉토리로 복사합니다.
예를 들어 커널 버전 5.14.0-362.24.1.el9_3.x86_64를 준수하는 드라이버의 경우 드라이버 파일의 타겟 경로는/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/5.14.0-362.24.1.el9_3.x86_64/scini.ko.
Additional Information
드라이버 캐시
특정 커널에 대해 성공적으로 컴파일된 SDC 드라이버는 드라이버 캐시의 해당 디렉토리로 복사되며 컴파일이 다시 트리거되지 않습니다.
드라이버 캐시의 위치는 다음과 같습니다. /bin/emc/scaleio/scini_sync/drive_cache.
빌드 로그
자동 주문형 컴파일을 사용하도록 설정하면 모든 컴파일 로그가 /bin/emc/scaleio/scini_sync/driver_build.log을 클릭합니다.
성공적인 컴파일은 다음과 유사한 메시지와 함께 종료됩니다.
make: Entering directory '/usr/src/linux-headers-5.15.0-30-generic' "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_main.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_mos.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_net.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_ioctl.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_io.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_dev.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.o "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD MODPOST /tmp/PowerFlex_driver_build_hpoM6l/ini/Module.symvers CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.mod.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko BTF [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko Skipping BTF generation for /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko due to unavailability of vmlinux make: Leaving directory '/usr/src/linux-headers-5.15.0-30-generic' 02-Apr-2024 11:46:48 INFO: Success.
SDC 초기화 컨테이너
SDC 초기화 컨테이너는 이 기능을 사용하도록 사전 구성되어 제공됩니다. 그것은 gcc를 포함하고 패키지를 만들고, /etc/emc/scaleio/scini_sync/.build_scini 파일이 있습니다. 그러나 컴파일이 성공하려면 호스트 커널의 커널 헤더 디렉터리를 컨테이너에 매핑해야 합니다. /usr/src. 예를 들어 Docker를 사용하여 컨테이너를 수동으로 실행하려면 호스트에 올바른 kernel-devel 패키지를 설치한 후 다음을 추가합니다. -v/usr/src:/usr/src 커널 헤더 디렉토리를 컴파일 스크립트에서 사용할 수 있도록 명령줄에 추가합니다.
제한
호스트의 Linux 배포판에서 사용할 수 있는 GCC 컴파일러가 일부 커널에 대해 SDC를 컴파일할 만큼 발전하지 않은 상황이 발생할 수 있습니다. 이 상황은 드물게 발생하며, 해당 배포판에 공통적인 커널이 아닌 사용자 지정 커널이 포함될 수 있습니다. 이 경우 사용자는 비표준 패키지 저장소에서 고급 GCC를 설치해야하며 해당 GCC의 위치는 $PATH에서 지정해야합니다. SDC 서비스에 대체 GCC 경로를 자동으로 제공하는 방법은 없습니다.
버전
3.6.3 이상
4.5.2 이상
비디오 지침