Покопавшись в исходном коде и стандарте POSIX, я бы сказал, что ответ @antje -m и @Gilles в основном правильный.
В качестве резюме стоит процитировать комментарий из POSIX.1 -2008 :
The use of 512-byte units is historical practice and maintains compatibility with ls and other utilities in this volume of POSIX.1-2008. This does not mandate that the file system itself be based on 512-byte blocks. The -k option was added as a compromise measure. It was agreed by the standard developers that 512 bytes was the best default unit because of its complete historical consistency on System V (versus the mixed 512/1024-byte usage on BSD systems), and that a -k option to switch to 1024-byte units was a good compromise. Users who prefer the more logical 1024-byte quantity can easily alias df to df -k without breaking many historical scripts relying on the 512-byte units.
Для размера блока вls -s
:
POSIX говорит , что размер блока по умолчанию определяется реализацией -, если не задана опция -k
.
Размер блока по умолчанию, реализованный в GNU coreutils
ls
, определяется в GNU gnulib
:.gnulib/lib/human.c
/* The default block size used for output. This number may change in
the future as disks get larger. */
#ifndef DEFAULT_BLOCK_SIZE
# define DEFAULT_BLOCK_SIZE 1024
#endif
который взят из старой фиксации:
commit 96e78d1f64d7c8d2acc5ad27dc3e73b96ae80585
Author: Jim Meyering
Date: Mon Jun 29 15:23:04 1998 +0000
В самом сообщении фиксации ничего не говорилось о числе 1024.
И обратите внимание, что размер блока, используемый в du
и df
, также равен 1024, ls
просто решил соответствовать им. Хотя для du
и df
это конфликт со стандартом POSIX (, поэтому здесь переменная окружения POSIXLY_CORRECT
идет ). Похоже, это решение команды GNU, см. страницу википедии POSIX об этом противоречии.
Для команды stat
.
Это не часть стандарта POSIX, ноstat
системный вызов . Однако единица измерения размера блока не стандартизирована(sys _stat.h):
The unit for the st_blocks member of the stat structure is not defined within POSIX.1-2008.
Команда stat
просто отображает информацию, предоставленную системным вызовом stat
, и использует размер блока 512 с некоторыми исключениями (, они не -Linux, например. HP -UX, IBM AIX и т. д. см. макросы, определенные в gnulib/lib/stat-size.h
).
Таким образом, число 512 является скорее историческим выбором и соглашением Linux.
GNU coreutils
(, следовательно, команда ls
)не является частью ядра Linux (, следовательно, вызов stat
), они нацелены на другой системный аспект, GNU coreutils
больше для человека (легче читать ), а ядро Linux для абстрактного оборудования (, следовательно, ближе к оборудованию ).
Изменить :Размер блока 4096 — это размер блока ввода-вывода, реальный физический размер блока, вероятно, по-прежнему составляет 512 байт , как объясняется в этом вопросе .
Во-первых, на той же вкладке «Сеть» окна «Настройки» убедитесь, что флажок «Выбирать случайный порт каждый раз при запуске передачи» не установлен. Также проверьте, какой порт прослушивания установлен. Номер порта по умолчанию — 51413.
В брандмауэре разрешите указанный выше номер порта TCP. Поскольку вы используете firewalld
, вы можете разрешить порт 51413, разрешив названную службу «клиент передачи -».
Если ваш маршрутизатор поддерживает NAT -PMP или если вы настроили маршрутизатор с ручной переадресацией портов, это все, что вам нужно! Передача теперь будет работать с вашим брандмауэром.
NAT -PMP доступен на маршрутизаторах Apple. Так же он есть на любом толково написанном роутере с последней версией открытого MiniUPnPd. Это прекрасно работает на маршрутизаторах OpenWRT :-).
Или, если вам нужна поддержка IPv6 (текущей версии IP :-), просто притворитесь, что я сказал NAT -PCP вместо NAT -PMP.
В противном случае вы, вероятно, использовали переадресацию портов uPnP. Это проблема, извините.Если вы не хотите вручную настраивать переадресацию портов на своем маршрутизаторе, на этой странице есть несколько возможных способов:Брандмауэр Fedora с UPnP?
firewalld
имеет именованную службу «клиент upnp -». Разрешение этой службы может позволить Transmission работать. Но разрешение этой службы означает, что злоумышленник может обойти брандмауэр для любого UDP-порта, если он осуществляет передачу с UDP-порта 1900.
Служба firewalld
для «клиента upnp -» определяется с помощью <source-port... />
. Это отличается от <port... />
, который используется в большинстве определений службы firewalld
. По этому поводу есть заявление об отказе от ответственности в скобках, но интерфейс firewalld
не показывает его.
$ cat /usr/lib/firewalld/services/upnp-client.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>UPnP Client</short>
<description>Universal Plug and Play client for auto-configuration of network routers (use only in trusted zones).</description>
<source-port port="1900" protocol="udp"/>
</service>
В предыдущей версии Debian при установке Transmission автоматически устанавливался minissdpd
. Передача может использовать minissdpd
для получения ответов uPnP, и это лучше работает с брандмауэром. Если вы разрешите UDP-порт 1900 в брандмауэре, Transmission сможет настроить перенаправление портов uPnP.
Проблема в том, что minissdpd представляет большую угрозу безопасности.
minissdpd
необходимо настроить со списком имен сетевых интерфейсов, на которых он должен работать. Debian предложит список по умолчанию. Обязательно внимательно проверьте это, если у вас есть несколько возможных сетевых интерфейсов, например. как Wi -Fi, так и проводной Ethernet.
После запуска minissdpd
не забудьте разрешить UDP-порт 1900 в брандмауэре, а затем перезапустите передачу.
Я заметил, что этот подход не работает в Fedora Linux. minissdpd
недоступен в Fedora, и Fedora не создает Transmission с поддержкой libminiupnp.