Ошибка ввода/вывода при попытке переименовать файл на телефоне, подключенном по USB

Вопрос или проблема

Я пытаюсь использовать bash-скрипт, чтобы заменить старый файл на своем телефоне на новый с моего ноутбука. Сначала я хочу переименовать файл на телефоне, а затем переместить его в резервную папку.

Чтобы переименовать, я выполняю эту команду:

mv --verbose --backup=numbered "/run/user/1000/gvfs/mtp:host=OnePlus_OnePlus_645cea20/Internal shared storage/Files/test.kdbx" "/run/user/1000/gvfs/mtp:host=OnePlus_OnePlus_645cea20/Internal shared storage/Files/test.kdbx.old"

В результате возникает ошибка:

mv: cannot move '/run/user/1000/gvfs/mtp:host=OnePlus_OnePlus_645cea20/Internal shared storage/Files/test.kdbx' to '/run/user/1000/gvfs/mtp:host=OnePlus_OnePlus_645cea20/Internal shared storage/Files/test.kdbx_2024-08-26_113426.old': Input/output error

Как правильно переименовать файл? Я использую Ubuntu 22.04.4 LTS.


Обновление:

Согласно советам из комментариев, я выполнил sudo dmesg -T. Я сделал несколько проверок в процессе подключения телефона, выполнения скрипта и отключения.

При подключении к компьютеру мой телефон требует переключить режим с ‘Нет передачи данных’ на ‘Передача файлов’, прежде чем я смогу получить доступ к файлам на своем ноутбуке. Я отмечаю эти этапы ниже.

Не было новых записей после выполнения моего скрипта mv и получения вышеуказанной ошибки.

Вот результаты, которые я получил:

Подключение

[Ср 28 авг 11:53:38 2024] usb 3-1: новое высокоскоростное USB-устройство номер 20, использующее xhci_hcd
[Ср 28 авг 11:53:38 2024] usb 3-1: Найдено новое USB-устройство, idVendor=05c6, idProduct=f000, bcdDevice= 4.09
[Ср 28 авг 11:53:38 2024] usb 3-1: Новые строки USB-устройства: Mfr=1, Product=2, SerialNumber=3
[Ср 28 авг 11:53:38 2024] usb 3-1: Продукт: OnePlus
[Ср 28 авг 11:53:38 2024] usb 3-1: Производитель: OnePlus
[Ср 28 авг 11:53:38 2024] usb 3-1: Серийный номер: 645cea20
[Ср 28 авг 11:53:38 2024] usb-storage 3-1:1.1: Обнаружено USB-устройство массового хранения
[Ср 28 авг 11:53:38 2024] scsi host6: usb-storage 3-1:1.1
[Ср 28 авг 11:53:39 2024] scsi 6:0:0:0: CD-ROM            OnePlus  Device Driver    0409 PQ: 0 ANSI: 2
[Ср 28 авг 11:53:39 2024] sr 6:0:0:0: Произошло включение или сброс устройства
[Ср 28 авг 11:53:39 2024] sr 6:0:0:0: [sr1] scsi-1 диск
[Ср 28 авг 11:53:39 2024] sr 6:0:0:0: Подключен scsi CD-ROM sr1
[Ср 28 авг 11:53:39 2024] sr 6:0:0:0: Подключен scsi generic sg2 типа 5
[Ср 28 авг 11:53:40 2024] Расширения ISO 9660: Microsoft Joliet Level 3
[Ср 28 авг 11:53:40 2024] ISOFS: смена на вторичный корень
[Ср 28 авг 11:53:40 2024] аудит: type=1400 audit(1724864020.433:326): apparmor="DENIED" operation="open" class="file" profile="snap.firefox.firefox" name="/etc/fstab" pid=3550 comm="firefox" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
[Ср 28 авг 11:53:44 2024] usb 3-1: сброс высокоскоростного USB-устройства номер 20, использующее xhci_hcd
[Ср 28 авг 11:53:44 2024] sr 6:0:0:0: Произошло включение или сброс устройства
[Ср 28 авг 11:53:44 2024] usb 3-1: сброс высокоскоростного USB-устройства номер 20, использующее xhci_hcd
[Ср 28 авг 11:53:44 2024] sr 6:0:0:0: Произошло включение или сброс устройства

Переключение в режим ‘Передача файлов’

[Ср 28 авг 11:56:30 2024] usb 3-1: USB отключено, устройство номер 20
[Ср 28 авг 11:56:30 2024] аудит: type=1400 audit(1724864190.532:327): apparmor="DENIED" operation="open" class="file" profile="snap.firefox.firefox" name="/etc/fstab" pid=3550 comm="firefox" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
[Ср 28 авг 11:56:30 2024] usb 3-1: новое высокоскоростное USB-устройство номер 21, использующее xhci_hcd
[Ср 28 авг 11:56:30 2024] usb 3-1: Найдено новое USB-устройство, idVendor=2a70, idProduct=f003, bcdDevice= 4.09
[Ср 28 авг 11:56:30 2024] usb 3-1: Новые строки USB-устройства: Mfr=1, Product=2, SerialNumber=3
[Ср 28 авг 11:56:30 2024] usb 3-1: Продукт: OnePlus
[Ср 28 авг 11:56:30 2024] usb 3-1: Производитель: OnePlus
[Ср 28 авг 11:56:30 2024] usb 3-1: Серийный номер: 645cea20

Запуск скрипта

<Нет новых записей>

Возврат к ‘Нет передачи данных’

[Ср 28 авг 12:02:11 2024] usb 3-1: USB отключено, устройство номер 21
[Ср 28 авг 12:02:11 2024] usb 3-1: новое высокоскоростное USB-устройство номер 22, использующее xhci_hcd
[Ср 28 авг 12:02:12 2024] usb 3-1: Найдено новое USB-устройство, idVendor=05c6, idProduct=f000, bcdDevice= 4.09
[Ср 28 авг 12:02:12 2024] usb 3-1: Новые строки USB-устройства: Mfr=1, Product=2, SerialNumber=3
[Ср 28 авг 12:02:12 2024] usb 3-1: Продукт: OnePlus
[Ср 28 авг 12:02:12 2024] usb 3-1: Производитель: OnePlus
[Ср 28 авг 12:02:12 2024] usb 3-1: Серийный номер: 645cea20
[Ср 28 авг 12:02:12 2024] usb-storage 3-1:1.1: Обнаружено USB-устройство массового хранения
[Ср 28 авг 12:02:12 2024] scsi host6: usb-storage 3-1:1.1
[Ср 28 авг 12:02:13 2024] scsi 6:0:0:0: CD-ROM            OnePlus  Device Driver    0409 PQ: 0 ANSI: 2
[Ср 28 авг 12:02:13 2024] sr 6:0:0:0: Произошло включение или сброс устройства
[Ср 28 авг 12:02:13 2024] sr 6:0:0:0: [sr1] scsi-1 диск
[Ср 28 авг 12:02:13 2024] sr 6:0:0:0: Подключен scsi CD-ROM sr1
[Ср 28 авг 12:02:13 2024] sr 6:0:0:0: Подключен scsi generic sg2 типа 5
[Ср 28 авг 12:02:13 2024] Расширения ISO 9660: Microsoft Joliet Level 3
[Ср 28 авг 12:02:13 2024] ISOFS: смена на вторичный корень
[Ср 28 авг 12:02:13 2024] аудит: type=1400 audit(1724864533.902:328): apparmor="DENIED" operation="open" class="file" profile="snap.firefox.firefox" name="/etc/fstab" pid=3550 comm="firefox" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
[Ср 28 авг 12:02:17 2024] usb 3-1: сброс высокоскоростного USB-устройства номер 22, использующее xhci_hcd
[Ср 28 авг 12:02:17 2024] sr 6:0:0:0: Произошло включение или сброс устройства
[Ср 28 авг 12:02:17 2024] usb 3-1: сброс высокоскоростного USB-устройства номер 22, использующее xhci_hcd
[Ср 28 авг 12:02:18 2024] sr 6:0:0:0: Произошло включение или сброс устройства

Отмонтирование через Ubuntu

[Ср 28 авг 12:03:07 2024] аудит: type=1400 audit(1724864588.134:329): apparmor="DENIED" operation="open" class="file" profile="snap.firefox.firefox" name="/etc/fstab" pid=3550 comm="firefox" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0

Отключение

[Ср 28 авг 12:05:52 2024] usb 3-1: USB отключено, устройство номер 22

Вместо mv для переименования файла на gvfs (виртуальной файловой системе gio) используйте gio, в частности gio rename.

gio находится в пакете libglib2.0-bin в ubuntu 22.04/”jammy”.

Виртуальные файловые системы могут быть сложными, потому что в зависимости от их реализации и протокола передачи (например, mtp) их поведение может отличаться от поведения родной файловой системы Linux (например, ext[234]), а также от поддержки общих утилит Unix.

Ответ или решение

Когда вы сталкиваетесь с ошибкой ввода/вывода ("Input/output error") при попытке переименовать файл на телефоне, подключенном через USB, вероятно, это связано с особенностями работы виртуальной файловой системы (GVFS) и протокола MTP (Media Transfer Protocol).

Решение проблемы

Вместо использования команды mv для переименования файла в виртуальной файловой системе, рекомендуется использовать утилиту gio, которая специально предназначена для работы с виртуальными файловыми системами. В вашем случае, вы можете сделать это следующим образом:

  1. Убедитесь, что у вас установлен пакет libglib2.0-bin, который включает утилиту gio. Обычно он уже установлен в Ubuntu 22.04, но если он отсутствует, вы можете установить его с помощью команды:

    sudo apt update
    sudo apt install libglib2.0-bin
  2. Используйте команду gio rename. Выполните следующую команду для переименования файла:

    gio rename "/run/user/1000/gvfs/mtp:host=OnePlus_OnePlus_645cea20/Internal shared storage/Files/test.kdbx" "/run/user/1000/gvfs/mtp:host=OnePlus_OnePlus_645cea20/Internal shared storage/Files/test.kdbx.old"

Объяснение

  • Почему mv не работает? Утилита mv предполагает работу с файловыми системами, которые полностью поддерживаются UNIX, такими как ext4. Однако, когда вы работаете с MTP через GVFS, поведение может отличаться, и mv не может корректно взаимодействовать с данной файловой системой.

  • Преимущества gio: Утилита gio обеспечивает более надежный интерфейс для выполнения операций с файлами на виртуальных файловых системах, таких как MTP, что позволяет избежать ошибок ввода/вывода.

Дополнительные советы

  • Проверьте режим подключения телефона: Убедитесь, что ваш телефон настроен в режиме "Передача файлов" (File Transfer), прежде чем выполнять команды.

  • Посмотрите на вывод dmesg: Если возникают другие ошибки, полезно проверять вывод команды dmesg, чтобы увидеть, нет ли проблем с подключением или оборудованием.

  • Проблемы с производительностью: Если ошибка продолжает возникать, возможно, стоит попробовать подключить устройство к другому порту USB или использовать другой кабель.

Следуя указанным шагам, вы сможете успешно переименовать файлы на вашем телефоне без ошибок.

Оцените материал
Добавить комментарий

Капча загружается...