Я не совсем уверен, что Ваше предположение корректно. Я регулярно использую устройства запараллеленной сети и его мой опыт, что сетевой трафик для одного из VMs несколько изолируется. Я использую KVM, но образующая мост технология, которую я использую, - то, что предлагается хостом Linux, таким образом, я предположил бы, что они, возможно, не идентичны, но подобны.
Также Ваше использование arp
смущает меня. Та команда просто показывает, с какими системами недавно связалась система, и они - MAC-адрес к отображениям IP-адреса, сохраняются в системном кэше ARP. Команда arp
отображает содержание этого кэша.
У меня есть хост VM + 1 гость.
хост
$ arp -a
hostX (192.168.1.226) at XX:XX:XX:XX:XX:XX [ether] on br0
hostY (192.168.1.7) at XX:XX:XX:XX:XX:XX [ether] on br0
hostZ (192.168.1.5) at XX:XX:XX:XX:XX:XX [ether] on br0
hostA (192.168.1.1) at XX:XX:XX:XX:XX:XX [ether] on br0
гость
$ arp -a
hostA (192.168.1.1) at XX:XX:XX:XX:XX:XX [ether] on eth0
hostY (192.168.1.7) at XX:XX:XX:XX:XX:XX [ether] on eth0
hostB (192.168.1.100) at XX:XX:XX:XX:XX:XX [ether] on eth0
hostC (192.168.1.8) at XX:XX:XX:XX:XX:XX [ether] on eth0
hostX (192.168.1.226) at XX:XX:XX:XX:XX:XX [ether] on eth0
Мосты являются устройствами Уровня 2, таким образом, я не ожидал бы видеть любое доказательство arp
данные по хосту VM, от гостя VM.
выборка - 9.2.5. Сетевой мост - документы Redhat
Сетевой мост является устройством Канального уровня, которое передает трафик между сетями на основе MAC-адресов и поэтому также упоминается как устройство Уровня 2. Это делает решения по передаче на основе таблиц MAC-адресов, которые это создает путем изучения того, какие хосты подключены к каждой сети. Программный мост может использоваться в хосте Linux для эмуляции аппаратного моста, например, в приложениях виртуализации для совместного использования NIC с одним или несколькими виртуальными NICs.
Я был бы сотрудник сетевой аналитический инструмент tcpdump
на обоих гость и хост VMs. Это, вероятно, покажет Вам, где узкое место.
$ sudo tcpdump -i eth0
Измените аргумент -i
для которого когда-либо сетевой интерфейс требуется контролировать.
Исходя из структуры каталогов:
$ tree
.
├── a
│ └── b
│ └── a.h5
├── b
│ ├── b
│ │ └── e.h5
│ └── c
│ ├── a.h5
│ └── b.h5
├── c
│ └── b
│ └── a.h5
├── d
│ ├── a.h5
│ └── e.h5
└── e
└── e.h5
12 directories, 8 files
Используйте этот для цикла
:
$ for f in */*/*.h5; do mv -v -- "$f" "${f%/*}/../"; done
»a/b/a.h5“ -> »a/b/../a.h5“
»b/b/e.h5“ -> »b/b/../e.h5“
»b/c/a.h5“ -> »b/c/../a.h5“
»b/c/b.h5“ -> »b/c/../b.h5“
»c/b/a.h5“ -> »c/b/../a.h5“
Результат :
$ tree
.
├── a
│ ├── a.h5
│ └── b
├── b
│ ├── a.h5
│ ├── b
│ ├── b.h5
│ ├── c
│ └── e.h5
├── c
│ ├── a.h5
│ └── b
├── d
│ ├── a.h5
│ └── e.h5
└── e
└── e.h5
12 directories, 8 files
Объяснение :
for f in */*/*.h5; do mv -v -- "$f" "${f%/*}/../"; done
для f в * /*/*.h5
перебирает все нужные файлы
mv -v -
подробно перемещает их. -
предотвращает интерпретацию имен файлов с дефисами в качестве аргументов. «$ f»
исходное имя файла $ {f% / *} /../
имя каталога, содержащего файл, ../
добавлено. Этот путь интерпретируется как «на один каталог вверх». Это должно быть начало:
find . -mindepth 3 -maxdepth 3 -type f -execdir mv -i -v {} .. \;
mv -i
просит перезаписать существующие файлы. -execdir
изменяет каталог файла перед выполнением команды.
попробуйте
for x in */*/*.h5
do
mv "$x" "$(dirname $(dirname $x))"
done
, если в именах каталогов нет странных символов.
Или, альтернативно:
ls */*/*.h5 | awk -F/ '{print "mv \"%s\" \"%s/%s\" \n",$0,$1,$3 ;}' | bash
вы можете удалить | bash
, чтобы получить предварительный просмотр.