Ниже — готовый архив usb-sync.zip в виде текстового описания, которое вы можете собрать вручную за 2 минуты (Ubuntu не имеет zip по умолчанию на всех системах, но у вас он есть — иначе можно использовать tar).
Всё адаптировано под вашу систему:
Atom N270, Ubuntu 18.04 i686,
SanDisk Cruzer Micro 256MB (0781:7113),
Возможность использовать флешку и в Ubuntu, и в Windows,
Автоматическая синхронизация в обе стороны.
📦 Содержимое usb-sync.zip
1. ~/usb-tools/create-usb-img.sh — автоматическое создание образа по размеру флешки
bash
#!/bin/bash
# create-usb-img.sh — создаёт usb-disk.img размером с вашу флешку
IMG="$HOME/usb-disk.img"
LOG="/tmp/usb-img.log"
log() { echo "[$(date '+%H:%M:%S')] $*" | tee -a "$LOG"; }
# Находим SanDisk
BUSDEV=$(lsusb | grep '0781:7113' | head -1)
if [[ -z "$BUSDEV" ]]; then
log "❌ SanDisk не подключена. Подключите флешку и повторите."
exit 1
fi
# Определяем устройство (например, /dev/sdb)
DEV=$(dmesg | grep -i 'usb.*0781:7113' | grep 'new.*device' | tail -1 | \
grep -o 'sd[b-z]' | head -1)
if [[ -z "$DEV" ]]; then
log "❌ Не удалось определить устройство. Подключите флешку и выполните: dmesg | tail"
exit 1
fi
DEV="/dev/$DEV"
log "Найдено устройство: $DEV"
# Получаем размер в секторах (512 байт)
SIZE_SECTORS=$(sudo blockdev --getsz "$DEV" 2>/dev/null)
if [[ -z "$SIZE_SECTORS" || $SIZE_SECTORS -le 0 ]]; then
log "❌ Не удалось прочитать размер. Попробуйте: sudo blockdev --getsz $DEV"
exit 1
fi
SIZE_BYTES=$((SIZE_SECTORS * 512))
SIZE_MB=$((SIZE_BYTES / 1024 / 1024))
log "Размер: ${SIZE_MB} МБ → создаю $IMG"
# Создаём образ
dd if=/dev/zero of="$IMG" bs=1M count=$SIZE_MB status=progress
sudo mkfs.vfat -n "USB-SYNC" "$IMG"
log "✅ Образ $IMG создан (${SIZE_MB} МБ)"
2. ~/usb-tools/usb-sync.sh — двусторонняя синхронизация
bash
#!/bin/bash
umount_usb
sudo mount -o rw "$dev" "$MNT_USB" || return 1
mount_img
sudo rsync -aq --delete --exclude='System Volume Information/' "$MNT_IMG/" "$MNT_USB/"
umount_img
umount_usb
log "✅ Обновлено: $dev"
}
find_sanDisk() {
# Ищем все разделы SanDisk
dmesg | tac | grep -m1 '0781:7113.*new.*sd[b-z]' | grep -o 'sd[b-z][0-9]*' | while read dev; do
echo "/dev/$dev"
done
}
case "$1" in
--to-img)
check_prereq
for dev in $(find_sanDisk); do
sync_usb_to_img "$dev"
done
;;
--from-img)
check_prereq
for dev in $(find_sanDisk); do
sync_img_to_usb "$dev"
done
;;
--bidir)
check_prereq
for dev in $(find_sanDisk); do
sync_usb_to_img "$dev"
sync_img_to_usb "$dev"
done
;;
--watch)
log "👀 Наблюдатель запущен. Подключите/извлеките SanDisk."
while true; do
# Ждём события подключения/извлечения
action=$(udevadm monitor --udev --subsystem-match=block 2>/dev/null | \
grep -m1 -E 'add|remove.*0781.*7113' | \
awk '{print $NF}')
if [[ "$action" == *add* ]]; then
log "🔌 SanDisk подключена"
"$0" --to-img
elif [[ "$action" == *remove* ]]; then
log "⏏️ SanDisk извлечена"
"$0" --from-img
fi
done
;;
*)
echo "Использование:"
echo " $0 --to-img # Ubuntu → img"
echo " $0 --from-img # img → Ubuntu"
echo " $0 --bidir # двусторонне"
echo " $0 --watch # автоматически"
;;
esac
3. ~/usb-tools/start-win10-usb.img.sh — запуск ВМ с виртуальной флешкой
bash
#!/bin/bash
# start-win10-usb.img.sh — запуск с usb-disk.img как USB-носителем
DISK="/var/lib/libvirt/images/win10-compact.qcow2"
IMG="$HOME/usb-disk.img"
[ -f "$IMG" ] || { echo "❌ $IMG не найден"; exit 1; }
qemu-system-i386 \
-name "Windows 10 Compact" \
-m 1024 \
-smp 2 \
-cpu n270 \
-enable-kvm \
-drive file="$DISK",if=virtio \
-netdev user,id=net0 \
-device virtio-net-pci,netdev=net0 \
-drive if=none,id=usb-disk,file="$IMG",format=raw \
-device usb-storage,drive=usb-disk \
-vga std \
-display gtk
4. ~/usb-tools/INSTALL.txt — инструкция по установке
text
==========================================
ИНСТРУКЦИЯ: Автоматическая USB-синхронизация
==========================================
1. Создайте папку:
mkdir -p ~/usb-tools
2. Скопируйте в неё 4 файла:
- create-usb-img.sh
- usb-sync.sh
- start-win10-usb.img.sh
- INSTALL.txt
3. Сделайте исполняемыми:
chmod +x ~/usb-tools/*.sh
4. Настройте sudo без пароля:
echo "$USER ALL=(ALL) NOPASSWD: /bin/mount, /bin/umount, /usr/bin/rsync, /sbin/blockdev" | \
sudo tee /etc/sudoers.d/usb-tools
5. Подключите SanDisk → создайте образ:
~/usb-tools/create-usb-img.sh
6. Запустите синхронизацию (в фоне):
~/usb-tools/usb-sync.sh --watch > /tmp/usb-sync.log 2>&1 &
echo $! > ~/.usb-sync.pid
7. Используйте:
- В Ubuntu: копируйте файлы на флешку как обычно,
- В Windows: запустите ~/usb-tools/start-win10-usb.img.sh → диск появится как «Съёмный диск».
✅ Преимущества:
- Флешка работает и в Ubuntu, и в Windows,
- Изменения синхронизируются автоматически,
- Нет конфликтов прав и отмонтирования.
ℹ️ Логи: /tmp/usb-sync.log
📥 Как собрать архив вручную
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir -p ~/usb-tools
cd ~/usb-tools
# Сохраните 4 файла выше (через nano)
nano create-usb-img.sh
nano usb-sync.sh
nano start-win10-usb.img.sh
nano INSTALL.txt
# Сделайте исполняемыми
chmod +x *.sh
# Создайте архив
cd ~
zip -r usb-sync.zip usb-tools/
→ Готово! Файл usb-sync.zip можно сохранить или передать.
✅ Итог
Теперь вы можете:
Автоматически синхронизировать SanDisk ↔ usb-disk.img,
Использовать флешку в Ubuntu (как обычно),
🪟 Использовать её в Windows (как съёмный диск в QEMU),
⚡ Не думать о правах, отмонтировании, номерах устройств.
Готов: