Когда я загружаю файл, скажем, 755M, отчет proftpd «На устройстве не осталось места»
lftp localhost: /> put test.bin put: Ошибка доступа: 552 791230988: На устройстве не осталось места ( test.bin)
но я запускаю / bin / df -h, я вижу, что все еще есть 414G. мой корневой каталог ftp находится в / home / ftproot
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda4 ext4 1.8T 1.3T 414G 75% /home
Так что я думаю, что в исходном коде proftpd есть некоторые ошибки.
После просмотра кода найдите основную причину.
proftpd-dfsg-1.3.5 ~ rc3 / modules / mod_xfer.c +2381
2380 } else {
2381 if (requested_sz > avail_sz) {
2382 pr_log_debug(DEBUG5, "%s requested %" PR_LU " bytes, only %" PR_LU
2383 " bytes available on '%s'", cmd->argv[0], (pr_off_t) requested_sz,
2384 (pr_off_t) avail_sz, path);
2385 pr_response_add_err(R_552, "%s: %s", cmd->arg, strerror(ENOSPC));
2386 return PR_ERROR(cmd);
2387 }
2388 }
2389 }
в строке 2381, единица Requesed_sz (791,230,988) в байтах, но единичная поставка instance_sz (435,293,500) находится в килобайтах
, см .: proftpd-dfsg-1.3.5 ~ rc3 / src / fsio.c +4263
4259 /* In order to return a size in KB, as get_fs_size() does, we need
4260 * to divide by 1024.
4261 */
4262 *fs_size = (((off_t) fs.f_bavail * (off_t) fs.f_frsize) / 1024);
, чтобы исправить эту ошибку:
if (requested_sz > avail_sz) {
нужно изменить как
if (requested_sz > avail_sz * 1024) {
, но я не знаю, как сообщить об ошибке команде proftpd devel, которая может зафиксировать ее proftpd?