J'utilise la solution VM Linux comme la vôtre depuis des années sur de multiples plateformes. Mais elle est différente et, selon le cas d'utilisation spécifique, bien meilleure. (J'ai également essayé votre méthode. Trop de problèmes, en particulier avec l'USB passthrough).
Voici ce que je fais, en gros, avec VirtualBox (ce n'est pas un guide étape par étape, mais cela devrait suffire à vous lancer) :
- Je n'attache pas le volume externe via l'interception USB ; je crée d'abord un VMDK brut du disque externe. Cela nécessite un peu de magie script : vous devez 1) vous assurer que la VM est hors tension. 2) Supprimer le fichier de métadonnées VMDK. 3) Détacher le contrôleur de stockage virtuel dédié à la clé USB. 4) Créer un nouveau fichier VMDK brut pour la clé USB [cette partie est difficile car l'emplacement physique change ; j'utilise un paramètre script pour le transmettre au script]. 5) Créez un nouveau contrôleur de stockage virtuel pour la VM. 6) Attachez le VMDK brut au nouveau contrôleur de stockage. 7) Démarrez la VM. L'inconvénient de cette approche est bien sûr que la clé USB et la VM sont liées pendant toute la durée de la session de la VM. Si vous débranchez la clé USB alors que la VM est en cours d'exécution, elle ne sera plus jamais valide (jusqu'à ce que vous arrêtiez la VM et exécutiez à nouveau le script). Mais les avantages sont énormes : A) Cela fonctionne parfaitement, contrairement à l'interception USB boguée. Et B) Les performances sont quasi natives [puisque l'hôte gère les E/S de bas niveau du périphérique], ce que vous ne pouvez pas obtenir avec l'interception USB.
- J'ai configuré la VM avec deux adaptateurs réseau : 1) NAT avec DHCP pour l'accès régulier à Internet depuis la VM, et 2) Host-only avec IP statique pour l'accès de l'hôte à la VM. Vous pouvez également vous contenter d'un seul adaptateur ponté, mais j'ai constaté que cette approche est plus idéale, car l'accès à Internet de la VM n'est pas lié à un adaptateur en particulier.
- J'ai configuré la VM pour qu'elle partage des dossiers via SMB. Dans mon cas, il s'agit de dossiers montés en encfs.
- Je monte ensuite des dossiers sur l'hôte, mappés via SMB sur l'invité.
Les performances sont plutôt satisfaisantes. SMB sur gigabit ethernet entre du vrai matériel a un maximum théorique de quelque chose comme 120 MB/s (il y a un nombre maximum spécifique mais c'est assez proche pour cette discussion). Vous n'atteindrez probablement pas un tel niveau pour le trafic SMB entre hôtes et machines, même en utilisant un adaptateur virtio sans limite de bande passante. Sur mon matériel le plus rapide, j'ai vu au mieux environ 70 Mo/s soutenus. Mais mon matériel n'est pas super rapide, vous pourriez faire mieux. (Bien que l'USB et le disque en rotation dans votre solution seront les facteurs limitants).
Je ne m'embêterais pas avec sshfs. L'overhead est important et le débit terrible. Le seul avantage de sshfs est le montage sur un réseau non sécurisé. Host-to-vm existe entièrement dans votre propre ordinateur et est donc aussi sûr que possible, vous n'avez pas besoin de cryptage, et le protocole réseau le plus léger que vous puissiez obtenir est idéal. (SMB n'est pas vraiment léger, mais il prend en charge, avec pratiquement tous les hôtes, toutes les actions de fichiers distants dont vous pourriez avoir besoin).
La solution que j'ai esquissée semble complexe - et elle l'est. Mais si l'on documente le processus réussi, il est trivialement facile la deuxième fois. J'ai scripté tout cela à la fois dans l'hôte et dans la VM, de sorte que c'est presque automatique pour chaque session, et facile à mettre en place pour les nouveaux hôtes et/ou VM. Et c'est une solution très agréable et transparente pour une utilisation quotidienne.
J'espère que cela vous aidera.