Я думаю, общие принципы сетевого поиска и устранения неисправностей:
Что касается меня, я обычно получаю всю запрошенную информацию с помощью всех необходимых инструментов и пытаюсь соответствовать этой информации к своему опыту. Решение, какой уровень сетевого стека содержит ошибку, помогает отключить маловероятные варианты. Используя опыт других людей помогает решить проблемы быстро, но часто он приводит к ситуации, что я могу решить некоторую проблему без ее понимания и если эта проблема происходит снова, для меня невозможно заняться им снова без Интернета.
И в целом, я не знаю, как я решаю сетевые проблемы. Кажется, что существует некоторая волшебная функция в моем названном мозгу SolveNetworkProblem(information_about_system_state, my_experience, people_experience)
, то, которое могло иногда давать точно правильный ответ и также могло иногда перестать работать (как здесь TCP умирает на ноутбуке Linux).
Я обычно использую utils от этого набора для сетевой отладки:
ifconfig
(или ip link
, ip addr
) - для получения информации о сетевых интерфейсахping
- для проверки, если целевой узел доступен от моей машины. ping
также мог использоваться для базовой диагностики DNS - мы могли проверить с помощью ping-запросов хост IP-адресом или его именем хоста и затем решить, работает ли DNS вообще. И затем traceroute
или tracepath
или mtr
смотреть, что продолжается на пути там.dig
- диагностируйте все DNSdmesg | less
или dmesg | tail
или dmesg | grep -i error
- для понимания, что ядро Linux думает о некоторой проблеме.netstat -antp
+ | grep smth
- мое самое популярное использование команды netstat, которая показывает информацию о соединениях TCP. Часто я выполняю некоторую фильтрацию с помощью grep. См. также новое ss
команда (от iproute2
новый стандартный пакет Linux сетевые инструменты) и lsof
как в lsof -ai tcp -c some-cmd
.telnet
- очень полезно для общения с различными сервисами TCP (например, на SMTP, протоколах HTTP), также мы могли проверить общую возможность соединиться с некоторым портом TCP.iptables-save
(на Linux) - для дампа полных iptables таблицethtool
- получите все параметры сетевой карты (состояние ссылки, скорости, разгрузите параметры...),socat
- швейцарский армейский инструмент для тестирования всех сетевых протоколов (UDP многоадресно передайте, SCTP...). Особенно полезный (больше, чем telnet) с некоторыми -d
опции.iperf
- протестировать доступность пропускной способностиopenssl
(s_client
, ocsp
, x509
...) для отладки всех проблем SSL/TLS/PKI.wireshark
- мощный инструмент для получения и анализа сетевого трафика, который позволяет Вам анализировать и ловить много сетевых ошибок.iftop
- покажите крупным пользователям в сети/маршрутизаторе.iptstate
(на Linux) - текущее представление отслеживания соединения брандмауэра.arp
(или новое (Linux) ip neigh
) - показывают состояние таблицы ARP.route
или более новое (на Linux) ip route
- покажите состояние таблицы маршрутизации.strace
(или truss
, dtrace
или tusc
в зависимости от системы) - полезный инструмент, который показывает, какие системные вызовы делает процесс задач, это также показывает коды ошибок (errno), когда системные вызовы перестали работать. Эта информация часто говорит достаточно для понимания поведения системы и решения проблемы. С другой стороны, использующие точки останова на некоторых сетевых функциях в gdb
может позволить Вам узнать, когда они сделаны и с который аргументы.iptables -nvL
шоу, сколько пакетов подобрано каждым правилом (iptables -Z
обнулять счетчики). LOG
цель, вставленная в цепочки брандмауэра, полезна для наблюдения, какие пакеты достигают их и как они были уже преобразованы, когда они добираются там. Добираться далее NFLOG
(связанный с ulogd
) зарегистрирует полный пакет.Одно решение состоит в том, чтобы использовать команду разделения.
Команда разделения разделит архив в в несколько файлов, делая всю тяжелую работу для Вас.
Вот пример:
tar -cvf - file1 file2 file3 | split --bytes=50m --suffix-length=4 --numeric-suffix - myarchive.tar.
И к untar:
cat myarchive.tar.* | tar xvf -
zip
пакет поддерживает bzip2 сжатие и --split
.
bzip2 будет отвечать Вашим требованиям?
- s splitsize - размер разделения splitsize Позволяет создать архив разделения и установил размер разделения. Архив разделения является архивом, который мог быть разделен по многим файлам. Поскольку архив создается, если размер архива достигает указанного размера разделения, которые разделяют, закрывается и следующее открытое разделение.
...
Размер разделения является числом, дополнительно сопровождаемым множителем. В настоящее время число должно быть целым числом. Множитель может в настоящее время быть одним из k (килобайты), m (мегабайты), g (гигабайты) или t (терабайты). Поскольку 64k является минимальным размером разделения, числами без значения по умолчанию множителей к мегабайтам. Например, для создания разделения архивируют названное нечто с содержанием каталога панели с разделениями 670 МБ, которые могли бы быть полезны для записи на CD, команды:
архивируйте-s 670 м-r панель нечто
мог использоваться.
Гарантировать целостность данных, rsync
с проверкой контрольной суммы. Это намного медленнее, но вычислит контрольную сумму с обеих сторон передачи.
- c, - контрольная сумма
Это изменяет путь rsync проверки, если файлы были изменены и нуждаются в передаче. Без этой опции rsync использует lqquick checkrq, который (по умолчанию) проверяет, соответствует ли размер каждого файла и время последнего изменения между отправителем и получателем. Эта опция изменяет это для сравнения 128-разрядной контрольной суммы для каждого файла, который имеет размер соответствия. Генерация контрольных сумм означает, что обе стороны израсходуют много диска ввод-вывод, считывающий все данные в файлах в передаче (и это до любого чтения, которое будет сделано для передачи измененных файлов), таким образом, это сможет значительно замедлить вещи.
непротестированный
cd /the/directory
files=(*)
i=0
z=0
create_zip=true
for ((i=0; i<${#files[@]}; i++)); do
if $create_zip; then
((z++))
zip_file=prefix.$z.zip
create_zip=false
fi
# add the file
zip $zip_file "${files[i]}"
# check the size
if (( $(stat -c %s $zip_file) >= 50000000 )); then
# remove the previous file
zip -d $zip_file "${files[i]}"
create_zip=true
# decrement the file index so this file gets added to the next zip
((i--))
else
echo rm "${files[i]}" ### remove "echo" if it's OK
fi
done