Вопрос или проблема
Я пытаюсь использовать 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
, которая специально предназначена для работы с виртуальными файловыми системами. В вашем случае, вы можете сделать это следующим образом:
-
Убедитесь, что у вас установлен пакет
libglib2.0-bin
, который включает утилитуgio
. Обычно он уже установлен в Ubuntu 22.04, но если он отсутствует, вы можете установить его с помощью команды:sudo apt update sudo apt install libglib2.0-bin
-
Используйте команду
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 или использовать другой кабель.
Следуя указанным шагам, вы сможете успешно переименовать файлы на вашем телефоне без ошибок.