Что именно значит установить сетевой интерфейс вверх и вниз?

tl;dr

cat /sys/fs/cgroup/memory$(cat /proc/self/cgroup | grep memory | cut -d: -f3)/memory.limit_in_bytes

или

cat $(mount | grep cgroup | grep memory | cut -d' ' -f3)$(cat /proc/self/cgroup | grep memory | cut -d: -f3)/memory.limit_in_bytes

Если ваша стандартная конфигурация контейнера позволяет получать информацию о cgroup хоста из контейнера (на основе настройки lxc.mount. auto), вы можете просто разобрать информацию о cgroup, как показано ниже

Проверьте информацию о вашей cgroup из /proc/self/cgroup

root@my-firefox:/# grep memory /proc/self/cgroup 
4:memory:/cv/my-firefox

Теперь, основываясь на точке монтирования вашей cgroup (можно найти ее из /proc/mounts), проверьте содержимое файла ограничения памяти

root@my-firefox:/# cd /sys/fs/cgroup/memory/cv/my-firefox/
root@my-firefox:/sys/fs/cgroup/memory/cv/my-firefox# cat memory.limit_in_bytes 
268435456

В моем случае выше, корень cgroup был смонтирован в /sys/fs/cgroup, так что с этой информацией и добавлением пути /memory/cv/my-firefox, я мог запросить все ограничения памяти, установленные для контейнера

В данном случае ограничение составляет 256M

PS: free и ansible_memtototal_mb основаны на хосте и не учитывают контейнеры. Я не знаком с ansible, но предполагаю, что в ней есть что-то похожее на facts в puppet, где можно написать пользовательский факт для сбора этой информации

.
7
22.07.2018, 06:52
1 ответ

Когда вы включаете/отключаете интерфейс, вы просто устанавливаете флаг в драйвере, указывающий, что интерфейс включен или выключен. Сетевая карта все еще включена и может участвовать в WOL (Wake on LAN )и т. д.

Если вы посмотрите на вывод интерфейса, здесь показан флаг состояния:

$ ip a l eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:72:14:26 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe72:1426/64 scope link
       valid_lft forever preferred_lft forever

state UP

Если бы я сказал ipперевести его в нерабочее состояние:

$ ip l set eth1 down

$ ip a l eth1
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 08:00:27:72:14:26 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global eth1
       valid_lft forever preferred_lft forever

Но как узнать, что он не выключен?

Просто. Используйте ethtoolдля дальнейшего опроса NIC.

$ ethtool eth1
Settings for eth1:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Advertised pause frame use: No
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: Unknown (auto)
    Supports Wake-on: umbg
    Wake-on: d
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: no

Ключевой частью этого вывода является Link detected: no. Это потому, что он находится в состоянии DOWN. Если мы вернем его:

$ ethtool eth1 | grep Link
    Link detected: yes

В этом случае Link detected: yesозначает, что сетевая карта включена и может обнаружить подключенный к ней кабель Ethernet.

Команды, использованные выше

Обратите внимание, что я использую сокращенные обозначения для команд:

  • a==addr
  • l==list

Есть и другие... Команда ip«достаточно умна», чтобы выяснить, какую команду или подкоманду -вы используете, и сделать вывод об этом.

Ссылки

14
27.01.2020, 20:17

Теги

Похожие вопросы