Quique Setien’s side went behind early on and struggled for much of the game, but Antoine Griezmann scored twice to ensure they go through to the next round.
Antoine Griezmann is now the first player to score in LaLiga, Champions League, Supercopa, and Copa del Rey this season.
Barcelona got off to a pretty terrible start and went behind on nine minutes. Rai Nascimento got free down the left and pulled the ball back for Javi Pérez to slot past Neto.
It almost got even worse nine minutes later when the hosts had the ball in the back of the net again, but Ronaldo’s effort was correctly ruled out for a shove on Clement Lenglet.
Barca saw plenty of the ball but did not manage a single shot, while Ibiza also hit the post and then forced Neto into a save just before half-time.
Setien’s men also made hard work of the second half. The new boss sent on Jordi Alba and then Arthur and Barca finally mustered an equaliser with just under 20 minutes to go.
Frenkie de Jong sent Griezmann scampering into the box, and the Frenchman kept his composure to beat the goalkeeper with a cool finish.
Barca tried to push forwards but had few sights of goal after that, while Ibiza started dishing out some heavy challenges and might have conceded a late penalty for a push on Ansu Fati.
The game looked to be drifting towards extra-time until Griezmann popped up with a very late winner. The Frenchman was played in by Alba and grabbed his second to send Barca through to Copa De Rey last 16.