리눅스 본드 - 정적으로 링크된 경우 매개변수 변경

리눅스 본드 - 정적으로 링크된 경우 매개변수 변경

Linux 네트워크 바인딩을 사용하여 몇 가지 테스트를 실행하고 싶습니다. 저는 qemu 가상 머신을 사용하고 있으며 이를 정적으로 링크된 바인딩으로 설정한 맞춤형 커널로 ​​실행하고 있습니다. 모듈(예: miimon)을 로드할 때 바인딩 매개변수를 설정할 수 있다는 것을 문서에서 보았습니다. 그런데 정적으로 연결할 때 이러한 값을 어떻게 설정합니까?

답변1

바인딩 인터페이스를 처리하는 두 가지 API가 있습니다.또한더 이상 사용되지 않는 명령(Linux에서) ifconfig및 을 사용 ifenslave하면 새 바인딩 인터페이스를 생성하지 못할 수 있습니다(따라서 max_bonds바인딩 모듈에 0이 아닌 인수가 필요함).

  • 커널(실온)네트워크 링크 API: 대부분의 최신 명령은 다음에서 제공됩니다.IP 경로 2명령이 포함되어 있습니다 ip link.

  • 핵심시스템 파일 시스템의사 파일을 통한 API: 일반적으로 /sys/.

"최근" 버전은 ifenslave실제로 다음에 따라 달라지는 것을 알 수 있습니다.시스템 파일 시스템API 및 관련 정보rtnetlinkAPI가 통과되었습니다 ip link.

기본 인터페이스 1개 또는 2개 대신 0개의 인터페이스를 생성하도록 바인딩을 구성해야 할 수 있습니다. 이는 이 두 API의 출현으로 더 이상 사용되지 않는 역사적 기능입니다. 이러한 인터페이스는 나중에 동적으로 생성되거나 삭제될 수 있습니다. 물론, 매우 작은 시스템의 경우 이를 유지하거나 원하는 양을 생성하도록 설정하는 것은 여전히 ​​선택 사항입니다. 이것을 커널 명령줄 옵션에 추가하면(일반적으로 항목에 있지만 /etc/default/grub올바르게 GRUB_CMDLINE_LINUX=수행하는 것은 배포판에 따라 다를 수 있음) 다음과 같은 트릭을 수행해야 합니다.

bonding.max_bonds=0
  • iproute2를 사용하여 바인딩을 수동으로 구성( ip link):

    경고: 링크된 문서는 다소 불완전하거나 오래되었으며 대부분의 (전부는 아니지만) 접착 기능이 ip link.

    올바른 명령을 사용하여 삭제 변경 세트 슬레이브 ip link등을 생성할 수 있습니다. type bond특정 명령을 지정해야 할 때마다 명령에는 키워드가 포함되어야 합니다 .링크그 뒤에는 옵션이 있습니다.

    명령 구문 알림, 세부 정보 표시링크설정:

    ip link add type bond help
    

    예(인터페이스는 노예화되기 전에 다운되어야 하지만 이전 상태를 알 수 없는 경우 동일한 단일 명령으로 설정할 수 있음):

    ip link add dev mybond0 type bond mode active-backup miimon 100
    ip link set dev eth0 down master mybond0
    ip link set dev eth1 down master mybond0
    ip link set dev mybond0 up
    ip link set dev eth0 up
    ip link set dev eth1 up
    

    설정 변경:

    ip link set dev mybond0 type bond miimon 200
    

    ifenslave동일한:

    ip link set dev mybond0 type bond active_slave eth1
    

    슬레이브 장치가 있으면 일부 설정을 변경할 수 없습니다. 예를 들어 키 유형을 재정의합니다.

    # ip link set dev mybond0 type bond mode balance-rr
    RTNETLINK answers: Directory not empty
    

    제어되는 장치는 다음과 같은 방법으로 해제될 수 있습니다.

    ip link set dev eth0 nomaster
    

    다음 명령을 사용하여 결합 장치를 제거할 수 있습니다.

    ip link delete dev mybond0
    

    특정에 관련된 다양한 정보링크장치(또는노예 노예장치)는 추가 옵션을 통해 확인할 수 있습니다 -details. 어떤 시점에서는 JSON 출력을 사용하는 것이 스크립트에 더 쉬울 것입니다(예를 들어 다음 Q/A:iproute2: 네트워크 장치 유형을 표시하는 방법은 무엇입니까?).

    ip -detail link show dev mybond0
    ip -detail link show dev eth0
    ip -detail link show dev eth1
    
  • Sysfs를 통해 바인딩을 수동으로 구성

    특정 기능이 통과하지 않는 한 오늘날 이 API를 사용하는 데 큰 의미가 없다고 생각합니다 ip link. 아마도 이전에 생성되었을 것입니다.IP 경로 2도구는 이 모든 것을 처리할 수 있습니다. 제한된/내장 시스템의 도구에서 명령에 더 이상 액세스할 수 없는 경우 명령을 읽는 것이 여전히 도움이 될 수 있지만 ip link그럴 가능성은 거의 없습니다.

    링크된 문서에서 언급했듯이 /sys/class/net/bonding_masters바인딩 모듈(여기서는 내장 모듈)이 존재하는 한 표시되는 바인딩 인터페이스를 생성하고 삭제할 수 있습니다.

    다음은 위와 동일한 명령입니다. echo ... > ...루트 셸에서 사용하세요(또는 리디렉션 문제를 해결하는 데 사용해야 함 sudo echo ... | tee ...).

    echo +mybond0 > /sys/class/net/bonding_masters
    echo active-backup > /sys/class/net/mybond0/bonding/mode
    echo 100 > /sys/class/net/mybond0/bonding/miimon
    

    인터페이스를 설정하는 방법이 없습니다.시스템 파일 시스템그래도. 안전을 보장하려면:

    ip link set dev eth0 down
    ip link set dev eth1 down
    
    echo +eth0 > /sys/class/net/mybond0/bonding/slaves
    echo +eth1 > /sys/class/net/mybond0/bonding/slaves
    

    다시 말하지만, 다른 방법은 없습니다:

    ip link set dev mybond0 up
    ip link set dev eth0 up
    ip link set dev eth1 up
    

    그런 다음 이전 예와 같이 계속합니다.

    echo 200 > /sys/class/net/mybond0/bonding/miimon
    echo eth1 > /sys/class/net/mybond0/bonding/active_slave
    
    # echo balance-rr > /sys/class/net/mybond0/bonding/mode
    bash: echo: write error: Directory not empty
    
    echo -eth0 > /sys/class/net/mybond0/bonding/slaves
    echo -mybond0 > /sys/class/net/bonding_masters
    

    특정한본딩정보는 다음에서 얻을 수 있습니다:

    cat /sys/class/net/bonding_masters
    grep ^ /sys/class/net/mybond0/bonding/*
    grep ^ /sys/class/net/eth0/bonding_slave/*
    grep ^ /sys/class/net/eth1/bonding_slave/*
    

관련 정보