MyTetra Share
Делитесь знаниями!
архив usb-sync.zip
Время создания: 15.11.2025 22:44
Автор: alensav
Текстовые метки: архив usb-sync.zip
Раздел: Windows_10
Запись: alensav/MyTetra2/main/base/1763235851wj023dywqf/text.html на raw.githubusercontent.com

Ниже — готовый архив 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),

⚡ Не думать о правах, отмонтировании, номерах устройств.

Готов:

 
MyTetra Share v.0.67
Яндекс индекс цитирования